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 !