Migrant mon site d'un outil que j'ai développé en php vers un blog, il me fallait mettre quelques rewrite rule dans Apache pour que les visiteurs retrouvent leur petit.
Le problème avec les rewrite rule d'Apache est que l'on ne peut pas mettre des URL avec des paramètres dans l'URL que l'on veut rediriger vers une autre. Exemple :
RewriteRule ^article.php?theme=Linux&id_fic=1 /blog/toto.php
La régle précédente ne fonctionne pas.
La solution
La solution que j'ai trouvé pour faire fonctionner ces rewrite rule est d'utiliser les variables d'en-tête HTTP que l'on peut utiliser avec les conditions. Exemple :
RewriteCond %{REQUEST_URI} ^/article\.php$
RewriteCond %{QUERY_STRING} theme=Linux&id_fic=1
RewriteRule .* /blog/archives/16-De-la-3D-avec-une-ATI-Radeon-9000-et-une-Debian-Woody.html [R=301,L]
Explication
La 1ère condition permet de sélectionner le programme php,
La 2ème permet de sélectionner les paramètres du programme php
et la règle permet de rediriger vers la nouvelle page (on redirigie toutes les URL qui répondent aux conditions précédentes).
J'ai utilisé le flag R=301 pour que les robots sachent que la page a changé de place de façon permanente et donc cela permet normalement de leur dire de mettre à jour la page dans leur base de données.