====== 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 [[#nom_de_domaine_canonique|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.
* Créer un fichier nommé //.htaccess// à la racine de l'arborescence de l'espace de publication d'origine
* Y indiquer les redirections suivant les exemples suivants :
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 [[http://www.htaccesseditor.com/en.shtml|é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 [[http://www.stevenhargrove.com/redirect-web-pages/|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 :
* déplacer les pages à leur nouvelle url
* remplacer les pages se trouvant aux anciennes url par des pages de type [[http://xhtml.le-developpeur-web.com/xhtml_1_0_frameset-xhtml.php|frameset]] dont l'unique frame pointe vers les nouvelles url.
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 .
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 [[https://httpd.apache.org/docs/current/fr/mod/mod_rewrite.html#rewriterule|documentation officielle]] (apache.org, fr).