Il y a des jours où l'on touche du doigt la métaphysique de Pangloss et l'on se dit que tous les événements sont enchaînés dans le meilleur des mondes possibles. Explication : j'ai trouvé un moyen de rediriger les anciennes URLs des feeds et des posts du blog. Ahah, oui il m'en faut peu.
Pour les URLs des posts, j'avais laissé le mode QUERY_STRING sous DotClear. J'ai changé leur forme en recodant mon blog. Elles passent donc de /weblog/?post/2009/07/27/Faut-il-coder-en-HTML-5-en-2009
à /weblog/2009/07/27/faut-il-coder-en-html-5-en-2009
par exemple. La slugification de Django change un peu, elle dégage les accents par exemple, ce qui rend assez pénible l'écriture d'une RewriteRule
dans Apache. J'ai eu la bonne idée de conserver le champ URL dans ma table des posts. Avec tous ces éléments j'ai pu écrire un petit bout de code qui se charge de faire une 301 vers les nouvelles URL des posts avec from django.http import HttpResponsePermanentRedirect
:
# Redirect old DotClear URLs
if request.method == "GET":
get = request.GET.keys()
if get and 'post' in get[0]:
url = get[0].replace('post/', '')
try:
p = Post.objects.get( url=url )
url_redirect = reverse('blog_detail', args=[
p.date_created.strftime('%Y'),
p.date_created.strftime('%m'),
p.date_created.strftime('%d'),
p.slug
])
return HttpResponsePermanentRedirect( url_redirect )
except Post.DoesNotExist:
pass
Pour les flux c'est Apache qui s'en charge :
RewriteEngine On
RewriteCond %{REQUEST_URI} /weblog/$
RewriteCond %{QUERY_STRING} ^feed/atom$
RewriteRule ^.*$ http://marcarea.com/weblog/feed/atom/posts? [L,R=301]
Et voilou, ça devrait rouler comme ça. C'est plus sympa pour tous ceux qui ont bookmarké ou blogmarké des posts ici. Mes URIs restent cools :)
"Cool URIs don't change" =)