Comment mettre en place les redirections 301 avec Apache

  • shape image
  • shape image
Comment mettre en place les redirections 301 avec Apache

Quoi de pire que de faire une recherche sous Google, trouver ce que nous cherchions et au moment où l’on clique, une page 404 qui apparait. La plupart des internautes reviendra sur la page des résultats de Google et continuera son chemin, sans plus d’attention que cela à votre site dans le meilleur des cas. Pourtant, cela aurait pu être évité , et simplement qui plus est, en mettant en œuvre les redirections 301. Les redirections 301 indiqueront à Google que le contenu d’une page a été redirigé de façon permanente d’une page vers une autre. Bien qu’Apache ne soit pas le seul dans son domaine à pouvoir accomplir ce type de tâche, nous verrons comment mettre en place les redirections 301 uniquement avec Apache par conviction ;)

Matt Inman, dans un article parut chez SEOmoz, nous dresse un tableau large de la manière d’utiliser les redirections 301 avec Apache sans être trop technique.

La problématique

seomoz.org était hébergé sous le domaine www.socengine.com/seo/ plutôt que sous un nom de domaine lui étant propre. Nous voulions que seomoz.org soit hébergé sous un serveur lui étant propre et accessible à partir de son propre nom de domaine et non comme étant le sous-répertoire de socengine.com. Nous voulions que toutes les personnes qui cherchaient n’importe quelle page de www.socengine.com/seo soient automatiquement redirigées vers www.seomoz.org. La redirection devait également prendre en compte des changements de noms de certains répertoires et fichiers et être faite à l’aide de la redirection de type 301. Cela dans le but d’être compatible avec les moteurs de recherche et tous les navigateurs web du marché. Nous avions également besoin de rediriger http://seomoz.org vers http://www.seomoz.org pour des raisons esthétiques et dans le but d’éviter un sabotage 301.Un bon hébergement WordPress vous donnera accès à ce type de fonctionnalités.

La solution

Une approche basique aurait consisté à ajouter des redirections de type 301dans les entêtes de fonctions Php. Toutefois, utiliser la puissance du module mod_rewrite d’Apache nous permet de faire correspondre un motif à tout un répertoire, sans avoir à manipuler chaque page Php dudit répertoire. De plus, certaines pages de notre site étaient statiques et il n’était pas pratique d’y inclure du Javascript ou des informations de redirection dans les balises META.

L’installation

Si votre serveur web ne dispose pas du module mod_rewrite, je vous suggère de vous référer à la documentation Apache pour cela. Cela requiers habituellement la recompilation d’Apache avec l’option -enable-module=rewrite ou bien --enable-module=most.

Si votre service d’hébergement n’a pas inclus le support du module mod_rewrite, j’insisterais auprès de l’administrateur système pour qu’il le fasse. La plupart des installations Apache ont le module mod_rewrite installé par défaut. Notre serveur tourne sous FreeBSD et le module mod_rewrite était activé par défaut. Une fois installé, vous pouvez vérifier s’il fonctionne en ajoutant la ligne à votre configuration Apache ou à votre .htaccess :
`
RewriteEngine On`

Le contexte

Le module mod_rewrite fonctionne en contexte serveur ou en contexte répertoire.

Le fonctionnement en contexte serveur nécessite d’éditer le fichier de configuration d’Apache, httpd.conf, tandis que le fonctionnement en contexte répertoire utilise les fichiers .htacess qui sont présents dans chaque répertoire que vous voulez configurer. Si vous ne pouvez avoir accès au httpd.conf alors il vous faudra utiliser les fichiers .htaccess.

Les Expressions Régulières (RegExes)

Extrait de wikipedia.org

“une expression rationnelle ou expression régulière est en informatique une chaîne de caractères que l’on appelle parfois un motif et qui décrit un ensemble de chaînes de caractères possibles selon une syntaxe précise. Les expressions rationnelles sont aujourd’hui utilisées par les informaticiens dans l’édition et le contrôle de texte ainsi que dans la manipulation de langues formelles que sont les langages de l’informatique.”

Nous allons utiliser les expressions régulieres pour rechercher des motifs de l’Url appelée, afin de la rediriger comme convenu. Apprendre les expressions régulières est inestimable si on est développeur ou administrateur système. Pour rediriger des Urls comme dans les exemples donnés dans ce document, il vous faudra juste apprendre le fonctionnement de base de l’utilisation des expressions régulières. Voici une liste de caractères ou d’opérateurs que nous allons manipuler dans nos exemples :

  • . Point - faire correspondre un caractère quelconque de façon unique.
  • * Astérisque - définit un groupe qui peut ne pas exister ou exister plusieurs fois.
  • + Signe plus - Défini un groupe qui existe une ou plusieurs fois avec l’élément qui le précéde.
  • () Parenthèse - Enfermer une valeur entre parenthèse a pour effet de stocker les valeurs correspondantes dans une variable qui peut être utilisée ultérieurement. Nous appelons aussi cela des rétro-liens.
  • (Valeur1|valeur2). Inclure deux variables ou plus entre parenthèse, séparé par un opérateur de choix, , revient à dire “correspondre à la valeurs 1 ou à la valeur 2”.

Rediriger un fichier ou un répertoire spécifique d’un domaine vers un autre

Nous avions besoin d’une redirection de notre ancien serveur vers le nouveau, en conservant les noms de fichiers tel quel.

Exemple

rediriger http://www.socengine/seo/unfichier.php vers http://www.seomoz.org/unfichier.php

La solution

Ajouter la directive suivant dans le fichier .htaccess:

RedirectMatch 301 /seo/(.*) http://www.seomoz.org/$1

Explication

L’expression régulière /seo/(.*) demande à Apache de faire correspondre tout ce qui est dans le répertoire seo qu’il y ait ou non des caractères. Entourer le .* de parenthèses, indique à Apache de conserver les caractères correspondants en tant que rétrolien. Ces rétroliens sont placés à la fin de l’Url vers laquelle nous redirigeons sous la forme du $1.

Rediriger sans préserver les noms de fichiers

Plusieurs fichiers qui étaient présents sur l’ancien serveur ne le sont plus sur le nouveau serveur. Plutôt que conserver ces fichiers dans la redirection, ce qui aboutirait à une erreur 404 sur le nouveau serveur, nous allons le faire pointer sur la racine du nouveau domaine.

Exemple

Redirection de http://www.socengine.com/seo/devieuxfichiers.php vers http://www.seomoz.org

La solution

Ajouter la directive suivante dans le fichier .htaccess:
`
RedirectMatch 301 /seo/devieuxfichiers.php http://www.seomoz.org`

Explication

En omettant les parenthèses, toutes les requêtes vers /seo/devieuxfichiers.php doivent rediriger vers la racine du domaine www.seomoz.org.

Rediriger les variables passées dans l’Url

Certains de nos scripts Php ont des noms différents, mais le passage de variables reste le même. Nous avons donc besoin de rediriger le visiteur vers le bon script Php tout en conservant les variables passées dans l’Url. Le passage de variables dans l’Url vient après l’appel de la page, commence par un ? et est utilisé pour véhiculer des variables à une page web.

Exemple

Rediriger la page http://www.socengine.com/seo/detailcategorei.php?CAT_ID=12345 vers http://www.seomoz/artcat.php?CAT_ID=12345

La solution

Ajouter la directive suivante dans le fichier .htaccess:
`
RedirectMatch 301 /seo/detailcategorie.php(.*) http://wwwseomoz.org/artcat.php$1`

Explication

Une fois encore l’expression régulière (.*) demande à Apache de faire la correspondance pour aucun ou plusieurs caractères et en fait une sauvegarde dans le rétro-lien $1. Dès que l’on ajoute $1 après /seo/detailcategorie.php, il redirigera les variables passées dans l’Url vers le nouveau script Php.

Faire une redirection en changeant les extensions de fichier

Nous avions un répertoire contenant des fichiers sur l’ancien serveur dont l’extension étaient aussi bien Html que Php. Sur le nouveau serveur, toutes les extensions sont en Php, il nous fallait donc que les Html s’adaptent au nouveau serveur.

Exemple

Rediriger les pages http://www.socengine.com/seo/guide/unfichier.html vers http://www.seomoz.org/artcicles/unfichier.php et http://www.socengine.com/seo/guide/unfichier2.php vers http://www.seomoz.org/artcicles/unfichier2.php.

La solution

Ajouter la directive suivante dans le fichier .htaccess:
`
RedirectMatch 301 /seo/guide/(.*).(php|html) http://www.seomoz.org/articles/$1.php`

Explication

(*.) fait correspondre à aucun ou plusieurs caractères et stocke cette valeur dans le rétrolien $1. .(php|html) dit à Apache de faire correspondre un point suivi aussi bien de “php” que de “html” et le sauvegarder dans un autre rétrolien, que nous n’utilisons pas ici. Remarquez bien que nous avons dû utiliser le caractère d’échappement cela afin de s’assurer qu’Apache n’interprète pas ce point comme une directive des expressions régulières, mais plutôt comme un vrai point. Mettre entre parenthèse Php et Html, séparé par l’opérateur de choix signifie de faire la correspondance sur l’une ou l’autre des valeurs.

En outre, s’il nous fallait conserver, pour une raison ou une autre, l’extension du fichier correspondant, il serait conservé dans le rétrolien $2. Les rétroliens s’incrémentent en accord avec le nombre de parenthèses utilisées dans l’expression régulière.

Rediriger les noms de domaines canoniques

Nous avions besoin de rediriger toutes les requêtes qui ne commençaient pas avec www.seomoz.org afin de s’assurer qu’elles incluaient bien les www. Nous avions fait cela non seulement car c’est plus esthétique mais aussi dans le but de parer au sabotage de type 301.

Exemple

Rediriger http://seomoz.org/ vers http://www.seomoz.org/

Rediriger http://mail.seomoz.org/ vers http://www.seomoz.org/

Rediriger http://seomoz.org/unfichier.php vers http://www.seomoz.org/unfichier.php

La solution

Ajouter la directive suivante dans le fichier .htaccess:
`
RewriteCond %{HTTP_POST} ^seomoz.org [NC]`

RewriteRule (.*) http:www.seomoz.org/$1 [L,R=301]

Explication

Cette directive demande à Apache d’examiner sur quel domaine le visiteur tente de se connecter (dans notre cas seomoz.org) et s’il n’est pas égal à www.seomoz.org alors il le redirige vers www.seomoz.org.

Dans notre cas, RewriteRule les renvoient sur www.seomoz.org en préservant le fichier qu’ils tentaient d’atteindre, grâce au rétrolien.

Conclusion

En s’attaquant à la puissance du module mod_rewrite et avec un peu de magie des expressions régulières, nous pouvons maintenant mettre au point un jeu de règle simple pour rediriger des pages internet. En utilisant les redirections de type 301 nous assurons une pleine compatibilité avec tous les navigateurs web et moteurs de recherche.

Adaptation de l’article de Matt Inman, Guide to applying 301 redirects with Apache

Sébastien Grillot
Sébastien Grillot

Tombé dans le référencement depuis 2009, j'y suis toujours et j'aime ça 😅 J'aime aussi partager sur tout ce qui touche au référencement naturel de votre site. Le secret du seo ? Faire du SEO utile et pertinent pour les internautes 💋