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
|