Le module mod_rewrite
Apache
se souvient des modèles, ou groupes passés dans les règles de réécriture, et on peut les rappeler grâce à la directive $N
, avec (0 <= N <= 9).
Apache
se souvient aussi des derniers ordres passés dans les conditions de réécriture, et on peut les rappeler grâce à la directive %N
, avec (0 <= N <= 9).
Un exemple concret :
RewriteCond %{HTTP_HOST} ^(www\.)+mamemeamoi\.(com|fr) [NC]
RewriteCond %{REQUEST_URI} ^(.*)\.php$ [NC]
RewriteRule ^/(.*) /$1?IDP=mameme [PT,QSA,S=4]
Traduit en clair, cela signifie :
- Si on vient ici à partir d’une adresse telles que
www.mamemeamoi.com
ou encorewww.mamemeamoi.fr
voiremamemeamoi.fr
alors c’est bon on continue les conditions pour la règle à venir - Si on demande à voir une page qui se termine par
php
alors c’est bon on continue les conditions pour la règle à venir - Si on est arrivé jusqu’ici c’est que toutes les conditions ont été validées => on applique la règle qui est, traduite en Français :
^/(.*) /$1?IDP=mameme
: on ajoute à l’URI, quelle qu’elle soit, les paramètresIDP=mameme
;- Directive
[PT]
: on applique cette URI en interne de manière à faire croire à tout ce qui suit, y compris une fois que les règles de réécriture sont terminées, que c’est vraiment cette adresse qui a été demandée, donc les autres modules agiront aussi en conséquence ; - Directive
[QSA]
: sur l’URI appliquée, on y fait suivre les paramètres qui se trouvaient après le?
, les paramètres_GET
enphp
. Par exemple si on a demandé/t.php?i=3
, on se retrouve avec l’URI finale/t.php?i=3&IDP=meme
, alors que sans la directiveQSA
, on se retrouve avec l’URL finale/t.php?IDP=meme
; - Directive
[S=4]
: on demande de sauter les 4 règles de réécriture qui suivent, et on appliquera celles qu’il y a après (s’il y en a).
Maintenant, voyons si on avait changé la règle de réécriture par :
RewriteCond %{HTTP_HOST} ^(www\.)+mamemeamoi\.(com|fr) [NC]
RewriteCond %{REQUEST_URI} ^(.*)\.php$ [NC]
RewriteRule ^/(.*) /%1%2/$1
Regardez bien : il y a le sigle %1
mais aussi le sigle $1
. En réalité le %1
est remplacé par ce qu’il y a dans les parenthèses rencontrées dans la condition de réécriture. Et en partant de la première condition ! A l’inverse, le $1
est remplacé par ce qu’il y a dans les parenthèses rencontrées dans la règle de réécriture. Ainsi si on demande l’URI http://www.mamemeamoi.com/popo.php
, elle sera transformée en http://www.com/popo.php
, et si on demande l’URI http://mamemeamoi.com/popo.php
, elle sera transformée en http://com/popo.php
. Ce qui ne sert à rien d’autre que de montrer un exemple. Mais imaginez ce que vous pouvez faire !