Vous êtes ici : Neoxys » Référencement naturel » Optimisations référencement » Redirection htaccess : récapitulatif

Redirection htaccess : récapitulatif

redirections htaccess

Le fichier .htaccess, ç’est quoi?

Ce fichier, placé à la racine du site permet de générer des URL à la volée, et également de faire des redirections de pages, dossiers, site, url avec ou sans paramètres… Bref, un fichier très utile pour faire des redirections 301 pour garder le référencement acquis quand on change de noms de pages lors de la refonte d’un site par exemple.

 

Utilisation du fichier .htaccess

Malheureusement, tout les hébergeurs ne supportent pas ce type de fichier particulier sur leur serveurs. Une seule solution pour vous : investir dans un autre hébergeur.

 

Les expressions régulières

Dans le fichier .htaccess, il faut utiliser les expressions régulières pour mettre en place les règles de réécriture.

. n’importe quel caractère
[abcd] n’importe lequel de cette liste de caractères
[^abcd] tout caractère non compris dans la liste (autre que a, b, c ou d)
blanc|noir alternative, soit « blanc », soit « noir »
+ Une ou N occurrence(s) de l’expression qui précède (N > 1)
* Zéro ou N occurrence(s) de l’expression qui précède (N>0)
(texte) Groupement permettant l’utilisation des références inverses ($1,… $n) . Est aussi utilisé pour délimiter une alternative comme (blanc|noir)
^ ancre de début de ligne
$ ancre de fin de ligne
\ permet d’échapper tout caractère qui suit et lui ôter sa signification particulière, par exemple \.

Quelques drapeaux (ou flags) utiles

Voici quelques drapeaux utiles pour faciliter la maintenance d’un site.

[L] Le flag [L] permet de sortir prématurément de la boucle.
[R][R=code] Une redirection est effectuée.
Si l’argument code n’est pas précisé, une redirection 302 (déplacé temporairement) est effectuée. Si vous souhaitez faire savoir au navigateur/robot qu’une page a été remplacée définitivement, utiliser le code 301 comme dans :
RewriteRule ^ancien\.html$ http://domaine.tld/nouveau.html [R=301,L]
Dans ce cas précis, une réécriture « externe » s’impose (utilisation de http://…)
Vous voyez ci-dessus que nous avons combiné deux flags en les séparant par une virgule.
[F] Forbidden – interdit. Retourne un code 403, par exemple :
RewriteRule ^secret.html$ – [F]
( pas de réécriture vu le deuxième argument – )
[NC] NoCase, ou « insensible à la casse ». La règle suivante :
RewriteRule ^script\.php$ programme.php [NC,L]
S’appliquera aussi bien à script .php, SCRIPT.PHP ou ScRiPt .PhP
[G] Gone. Cette page n’existe plus et retourne une entête http 410
[N] Force l’analyse et l’exécution de toutes les règles en repartant du début de la liste. Ici encore, comme expliqué plus haut ([L]), c’est l’URL modifiée après exécution de la dernière règle qui est utilisée en entrée, et non l’URL originelle. Attention aux boucles infinies !!
[ C ] Chain, chaînage avec la ou les règles suivantes jusqu’à la première règle ne se terminant pas par [ C ]
Apache interprète ce flag comme suit : s’il y a réécriture (la règle est vérifiée), la règle suivante est exécutée avec la chaîne réécrite en entrée.
Si la règle ne se vérifie pas, toutes les règles qui suivent jusqu’à la première ne comportant pas le flag [ C ] ne sont pas appliquées.
[QSA] Query String Append. Rajoute le QUERY_STRING à la fin de l’expression, après la réécriture.

Source : Webmaster Hub

Cette liste n’est pas exhaustive, car il existe d’autres flags supportés. La liste complète est décrite dans la documentation du module mod_rewrite sur le site d’Apache.

 

Règles de base du .htaccess

Options +FollowSymlinks

L’option FollowSymlinks donne l’instruction au mod_rewrite de suivre les liens symboliques.
Si votre hébergeur ne le supporte pas, il se peut que cela vous génère une erreur 500. Dans ce cas, supprimez cette ligne.

Options -Indexes

Cette ligne n’est pas utile pour les redirections, mais est quand même très importante : elle empêche les petits curieux de parcourir vos dossiers sur le site. Un exemple concret : votre dossier /images vas lister toutes vos belles images, alors qu’avec cette ligne dans le fichier .htaccess, impossible d’avoir le listing complet du dossier.

RewriteEngine On
RewriteBase /

On active le RewriteEngine avec « RewriteEngine On ». RewriteBase permet de spécifier la racine de votre réecriture. Ici, le simple slash ( / ) permet d’indiquer que tous mes fichiers ainsi que l’index sous dans le répertoire racine du site et pas dans un répertoire.
Bien sûr, vous devez modifier cette ligne en fonction de votre site et de son arborescence.

Il faudra surement activer PHP 5 pour que ce soit compatible et éviter une erreur 500
Pour PHP 5.2 – OVH : www.ovh.com

SetEnv PHP_VER 5

PHP 5.3 – OVH : www.ovh.com

SetEnv PHP_VER 5_TEST

Article complet pour activer PHP 5 avec HTACCESS sur le site de Kuhm Cyril.

 

Différentes utilisations des redrections .htaccess

Rediriger un site sans « www » vers le site en « www »

(utile pour éviter le duplicate content, et donc booster votre référencement Google)

RewriteCond %{HTTP_HOST} ^domaine\.com$ [NC]
RewriteRule ^(.*)$ http://www.domaine\.com/$1 [R=301,L]

 

Rediriger la page « index.php » vers « / »

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php\ HTTP/
RewriteRule ^(.*)index\.php$ /$1 [R=301,L]

 

Rediriger la page « index.html » vers « / »

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.html\ HTTP/
RewriteRule ^(.*)index\.html$ /$1 [R=301,L]

 

Redirection des anciennes pages vers les nouvelles

RewriteRule ^anciennepage.html$ http://www.site.com/nouvellepage.html [L,R=301]

 

Redirections de toutes pages html vers pages identiques mais en php

RewriteRule /?(.+)\.html http://www.site\.com/$1.php [R=301,L]

 

A l’inverse, redirections de toutes pages php vers pages identiques mais en html

RewriteRule /?(.+)\.php http://www.site\.com/$1.html [R=301,L]

 

Redirection des anciennes pages vers les nouvelles, mais avec des paramètres dans les anciennes URLS

On veut rediriger : dossier/page.php?code=abc vers http://www.site.com

RewriteCond %{REQUEST_URI} ^/dossier/page.php$ [NC]
RewriteCond %{QUERY_STRING} ^code=abc$ [NC]
RewriteRule (.*) http://www.site.com/? [R=301,NC]

Le ? sert à nettoyer l’URL après la règle, afin d’avoir la bonne url dans votre navigateur

 

Rediriger tout son site vers une page unique avec htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

 

Redirection pour changement de nom de domaine

Redirect permanent / http://nouveausite.com/

Ceci est le cas où le site reste totalement identique, mais change d’adresse principale. Le but est de rediriger toutes les anciennes adresses vers les nouvelles.

 

Redirection d’un dossier/répertoire

Redirect permanent /dossier http://nouveausite.com/dossier

Ceci est le cas où un répertoire complet change de place (ou de nom) sur le même serveur.

 

Redirection d’une page

Redirect permanent /page.html http://nouveausite.com/page.html

 

Redirection PHP

Dans le cas ou la resirection .htaccess ne peut pas se faire, on peut toujours faire une redirection en PHP
Code HTTP de redirection permanente et adresse de la nouvelle page :

<?php
header("Status: 301 Moved Permanently", false, 301);
header('Location: http://www.nouveausite.com/');
exit();
?>

 

Si l’un de ces codes ci-dessus ne fonctionne pas, vous pouvez réagir et laisser un commentaire !

A propos de l'auteur : Neoxys

Jérémie NEUBAUER travaille en tant que chef de projet SEO dans une agence de référencement depuis 2007. C'est en véritable passionné qu'il tient ce web blog et fait une veille quotidienne pour se tenir informé des évolutions et news de la sphère du référencement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

* Pour le nom, utilisez la syntaxe nom@mots-clés (ex:Jean@Agence internet) pour avoir un lien retour vers votre site avec un mot-clé.

L'adresse de votre site pour le lien retour Dofollow

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>