Comme vous l'avez certainement remarqué, j'ai migré mon blog motorisé par Wordpress vers un cms basé sur Drupal, j'ai repris l'historique des articles de Wordpress et je suis passé d'un sous-domaine à un domaine, avec au passage un changement d'identifiant des articles (indépendant de ma volonté), rien que ça !
Le problème, comment ne pas perdre le référencement des moteurs de recherche, comment rediriger les liens des sites référents vers le nouveau site au bon endroit ?
Apache et son mod-rewrite
En fait, ce n'est pas très compliqué, un simple fichier peut faire l'affaire. Si comme nous, les pages de l'ancien site sont servies par un serveur Apache, vous pouvez faire votre redirection en placent quelques directives à destination du mod_rewrite dans un fichier .htaccess à la racine de ce site.
Parmi toutes les directives à disposition, deux possibilités sont envisageables: 1. la liste de toutes les redirections à effectuer avec RewriteRule, ou 2. l'utilisation de la directive RewriteMap. Malheureusement, seule la première est techniquement réalisable. En effet, il semble que les RewriteMap ne peuvent pas être employées dans un fichier .htaccess et doivent être définis au niveau de la configuration du server ou du virtual host...
Enfin, pour des cas plus compliqués, il est tout a fait possible d'établir des conditions pour la réécriture d'URL avec RewriteCond ou de faire du log dédié avec RewriteLog et RewriteLogLevel. Bref, un fonctionnement très souple et très fin qui ne demande qu'à être utilisé. Par exemple, nous avons également utilisé le mod_rewrite d'Apache dans d'autres conditions pour forcer la redirection vers un nom d'hôte complet.
De la théorie à la pratique
Exemple
Voici un extrait du mien pour vous donner une idée :
RewriteBase /
RewriteRule ^archives/2.*$ http://www.fbollon.net/node/2 [L,R=301]
RewriteRule ^archives/12.*$ http://www.fbollon.net/node/10 [L,R=301]
RewriteRule ^archives/22.*$ http://www.fbollon.net/node/16 [L,R=301]
RewriteRule ^archives/94.*$ http://www.fbollon.net/node/73 [L,R=301]
...
RewriteRule ^$ %{QUERY_STRING} [C]
RewriteRule p=2 http://www.fbollon.net/node/2 [L,R=301]
RewriteRule p=12 http://www.fbollon.net/node/10 [L,R=301]
...
RewriteRule ^ubuntu/*$ http://www.fbollon.net/ubuntu_trucs_astuces [L,R=301]
RewriteRule ^fonds-decran/*$ http://www.fbollon.net/wallpapers [L,R=301]
RewriteRule ^about/*$ http://www.fbollon.net/about [L,R=301]
RewriteRule (.*) http://www.fbollon.net/ [L,R=301]
Explications
RewriteRule, simplicité et efficacité
Sur Wordpress l'url de ce billet était http://blog.fbollon.net/archives/94 avec Drupal sur le nouveau site après la reprise de données l'url devient http://www.fbollon.net/node/73
RewriteRule p=2 http://www.fbollon.net/node/2 [L,R=301]
RewriteRule p=12 http://www.fbollon.net/node/10 [L,R=301]
Sur Wordpress on peux accéder aux billets par une url du type http://blog.fbollon.net/?p=12 le "?p=12" sont des paramètres d'url il faut donc précéder les RewriteRule par
pour que la redirection fonctionne dans ce cas
Expression régulière, la puissance à l'état brut
^archives/94*$
" ^ " et " $ " sont les limites ce que l'on veux rediriger est à l'intérieur, j'ai rajouté * pour les url du genre http://blog.fbollon.net/archives/94#comments
Flags de fin de ligne, petits mais costauds
Pour les flags [L,R=301] :
- L pour arrêter le processus de ré-écriture, quand une règle est appliquée.
- R=301 pour préciser qu'il s'agit d'une redirection définitive
Pour le flag [C] :
- C pour chainer la règle avec les règles suivantes
Redirection finale, ou le ramasse-miettes
et pour finir pour tout ce que j'aurais pu oublier, je renvoie tout sur le nouveau site:
Conclusion
Le plus long c'est de faire le mapping.
Le résultat, testez le vous même. Cliquez sur ces deux liens, vous arriverez au même endroit: http://blog.fbollon.net/archives/94 et http://www.fbollon.net/node/73
Liens
- Guide officiel mod_rewrite sous Apache illustré de nombreux exemples
- Documentation du mod_rewrite pour les versions 1.3 et 2.0 d'Apche
Articles similaires
- Installation de Trac chez l'hébergeur Dreamhost, en un clic
- Quand un habitué de Prototype teste jQuery - part. 2 : suite et fin
- Quand un habitué de Prototype teste jQuery - part. 1 : un problème de taille
- Petit bug jQuery / TinyMCE
- Validateur W3C en local sous Mac OSX
- Diaporama automatique avec Lightbox
- Comment choisir son langage/framework de développement web?
- Installation de Trac sur un hébergement Dreamhost
- Créer un projet subversion chez l'hébergeur Dreamhost
- Hébergement dreamhost, difficile de faire mieux



