TUTORIELS 
Le fichier .htaccess (1) : mod_ rewrite

Page 1 | 2

Focus sur ce petit bout de texte bien utile pour Apache et ses modules. On commence avec l'application de règles de réécriture.
 (19 septembre 2003)
 

Nous avons déjà abordé l'utilisation du fichier .htaccess et du module mod_rewrite lors de précédents articles sur la sécurité des dossiers Web et la réécriture d'URL à la volée en PHP. Dans cette série d'articles, nous nous tenterons d'offrir un regard plus large sur les possibilités qu'offre l'utilisation de ce fichier avec les divers modules d'Apache.

Description
Comme chacun sait, Apache est le serveur Web le plus populaire depuis longtemps, non seulement par sa gratuité (c'est un projet Open Source), mais surtout parce qu'il a prouvé être extrêmement stable en comparaison à des serveurs autrement plus payants. Il tourne principalement sur système UNIX, mais les versions Windows d'Apache le reconnaissent aussi.

.htaccess n'est rien de plus qu'un fichier texte - il n'a pas de "nom", juste une extension, il ne faut donc pas faire d'erreur, et sa création n'est de fait pas facile sur les anciens sytèmes Windows, qui interdisent les fichiers sans nom.

Il contient des instructions envoyées au serveur avant tout appel de page du dossier dans lequel le fichier se trouve (ou ses sous-dossiers). Ainsi, un fichier .htaccess se trouvant à la racine du serveur "agira" sur l'ensemble du site, tandis que des .htaccess plus ciblés peuvent se trouver dans des sous répertoires spécifiques.

mod_rewrite est, comme son nom l'indique en partie, un module d'Apache permettant d'appliquer des règles de réécriture aux requêtes reçues - c'est un outil très puissant mais compliqué à manipuler, aussi il est souvent recommandé de faire appel à mod_alias (que nous verrons plus tard) pour la gestion de requêtes simples, si ce module est disponible.

"Appliquer des règles d'écriture aux requêtes reçues" signifie simplement que lorsque le serveur reçoit une requête d'une URL donnée, une règle peut avoir été créée pour cette URL, et la modifier. En pratique, par exemple, on pourrait faire en sorte que toutes les requêtes vers http://monsite.com/photos/12 donne côté serveur une requête http://monsite.com/site.php?rub=5&id=12.

Il est ainsi possible d'avoir un réel contrôle sur les pages servies (ou pas) par le serveur - dans la mesure où votre hébergeur vous permet de l'utiliser. Certains hébergeurs n'acceptent pas .htaccess, d'autres l'acceptent mais le limitent à certains usages (pas de mod_rewrite, par exemple)... Il ne tient qu'à vous de vous renseigner.
Cette série d'articles vous montrera les divers usages que l'on peut faire de ce fichier.

Utilisation de mod_rewrite.
Ce module est plein de ressources, mais il faut en connaître les arcanes. Avant de vous en exposer les possibilités avec un premier exemple, nous allons voir quelques directives de base. Notez que celles-ci sont sensibles à la casse : une directive mal écrite, et le serveur peut ne plus rien vouloir afficher...

RewriteEngine
Cette directive sert à activer le moteur de réécriture. C'est la première directive à appeler avant toute autre, sous la forme RewriteEngine on
.
Omettre le on laisse le moteur sur off - ce qui est plus rapide que de mettre l'ensemble des directives suivantes en commentaire, si doute il y a...

RewriteRule
C'est le coeur de la réécriture : c'est ici que s'appliquent les transformations, à l'aide d'expressions rationnelles. Il peut y avoir plusieurs RewriteRule à la suite, leur enchaînement donnant l'ordre dans lequel les règles sont appliquées.

RewriteRule motifTesté substitutionAppliquée [drapeau]

Le motif correspond à l'expression rationnelle appliquée à l'URL de la requête. L'expression permet de "cibler" certaines parties de cette URL. Notez qu'il peut s'agir d'une URL réécrit par une précédente réécriture dans notre .htaccess, donc attention à l'enchaînement des directives...

La substitution est simplement la chaîne qui viendra remplacer les URLs reconnus par notre expression rationnelle. Elles peuvent inclure des "rétro-références", que nous explorerons dans un autre article.

Le drapeau, enfin, est optionnel et créé un troisième argument, pouvant largement modifier un résultat. Nous n'en donnerons pas une liste exhaustive, les plus utiles apparaîtrons dans nos exemples.

RewriteCond
Créé un condition d'application de règle par rapport à une chaîne testée.

RewriteCond chaîneTestée motifAppliqué [drapeau]

La chaîne peut prendre la forme d'une variable de serveur, ce qui permet de tester de nombreuses informations en provenance de votre visiteur : HTTP_USER_AGENT, HTTP_REFERER, REMOTE_HOST, TIME_DAY, SERVER_SOFTWARE... Pour être utilisées, ces variables doivent être encadrées de %{ et }.

Le motif utilise ici encore les expressions rationnelles de type POSIX, avec quelques améliorations. Nous verrons leur utilisation dans nos exemples.

Le drapeau peut prendre la forme NC ou OR, précisant qu'il ne faut pas prendre en compte la casse (No Case) ou création un OU (OR) logique avec la condition qui suit immédiatement (par défaut, les directives sont reliées deux à deux par un ET logique). Les deux peuvent être combinés, séparés par un virgule : [NC,OR].

Page 1 | 2

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page