Table des matières

Redirections permanentes

La redirection est une situation prévue par le protocole http. Autrement dit, quand on redirige une page, on ne bidouille pas pour que l'utilisatrice n'y voit que du feu, on mobilise un mécanisme pensé et prévu à cet effet. Par défaut, la plupart des navigateurs sont configurés pour que l'utilisatrice n'y voit que du feu. Les moteurs ne recherche exploiteront l'information de redirection afin de faire bénéficier la nouvelle url du classement de l'ancienne.

Lorsque le navigateur d'une internaute (ou un moteur de recherche) demande une page qui a été déplacée, il ne faut pas lui répondre avec la nouvelle page mais lui dire : “cette page a été déplacée, vous la trouverez à tel endroit”. Si le déplacement est définitif, on parle, en jargon technique, d'une “redirection 301”.

On confond souvent la redirection avec la notion de nom de domaine canonique. On parle de canonical hostname lorsque plusieurs noms de domaines pointent systématiquement sur un seul et même site. Un cas extrêmement fréquent est celui où “mon-domaine.tld” et “www.mon-domaine.tld” désignent le même site mais où l'on souhaite qu'une des deux adresses soit l'adresse de référence (canonique). Voir, en fin, le traitement de ce cas.

Directement par Apache

La technique la plus clean. Elle ne fait travailler que le serveur.

En utilisant la directive de redirection

L'usage des fichiers .htaccess et de la directive Redirect doivent être autorisés par la configuration du serveur Apache.

Si l'on déplace toute l'arborescence vers une nouvelle URL

Redirect 301 / http://www.my_new_url.org/

Si l'on ne déplace qu'une partie de l'arborescence

Redirect 301 /au_depart/ http://www.my_new_url.org/a_l_arrivee/

Si l'on ne déplace qu'une page

Redirect 301 /index.html http://www.my_new_url.org/index.php
On peut utiliser un éditeur de fichiers .htaccess en ligne.

En utilisant le module de réécriture d'URL

L'usage des fichiers .htaccess et de les directives Rewritexxxxx doivent être autorisés par la configuration du serveur Apache.

Dans le fichier .htaccess se trouvant à la racine de l'espace d'hébergement, on ajoutera :

RewriteEngine On
rewritecond %{http_host} ^yoursite.com 
rewriteRule ^(.*) http://www.yoursite.com/$1 [R=301,L]

Redirection par programme

La méthode est aussi propre que le paramétrage du serveur car, vu de l'extérieur, elle produit exactement le même résultat. Beaucoup de cas possibles : PHP, Ruby, JSP Java, Pearl, ASP, .Net… Un article [en] en détaille quelques-unes.

Par exemple, en PHP :

<?
header( “HTTP/1.1 301 Moved Permanently” );
header( “Status: 301 Moved Permanently” );
header( “Location: http://mon-domaine.org/” );
exit(0); // Instruction optionnelle mais recommandée
?>

Masquer la redirection en HTML (frames)

En HTML, il est impossible de faire une redirection. On ne peut que la simuler. Pour l'internaute, cela peut ne pas faire de différence. Pour la webmestre cela complique les choses. En matière de classement par les moteurs, cette technique ne permet pas de cumuler le classement de l'ancienne et de la nouvelle page.

Dans ces conditions, pourquoi indiquer cette technique ? Parce que si votre hébergeur vous interdit les fichiers .htaccess ainsi que la possibilité d'exécuter des programmes, c'est votre dernier recours.

En utilisant les frames

Les frames ont mauvaise presse, ce n'est pas une raison pour ne pas les utiliser ;-)

Le principe est le suivant :

On doit donc assurer la maintenance de deux ensembles de pages. Les pages “réelles” qui se trouvent aux nouvelles url et les pages frameset qui les remplacent aux anciennes url.

Certains navigateurs peuvent refuser les frames et se rabattre sur la version no-frame de la page.

Ne pas utiliser

L'une des méthodes les plus utilisées pour traiter un problème de redirection est le recours à la balise html <meta>.

<meta http-equiv="refresh" content="0; url=http://www.my_new_site.com" />

C'est pourtant la pire ! D'une part, elle n'est raisonnablement applicable que si un nombre limité de fichiers est déplacé. D'autre part, les moteurs de recherche désindexeront immédiatement l'ancienne page. Tout le bénéfice du classement sera perdu.

Nom de domaine canonique

Sur un serveur Apache équipé du module mod_rewrite, on obtient le résultat souhaité en réécrivant l'url. Comme indiqué dans l'introduction, il ne s'agit pas d'une redirection, en conséquence de quoi cette opération ne sollicite nullement le navigateur de l'internaute.

Voici l'exemple d'une réécriture de “example.com” en “www.example.com” :

# Au cas où le nom de domaine est exploité sur plusieurs port
RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://www.example.com:%{SERVER_PORT}/$1 [L,R]

# Si seul le port 80 est exploité
RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R]

Pour une description complète des drapeaux entre crochets, rien ne vaut la documentation officielle (apache.org, fr).