☰ htaccessURLRewriting
 

htaccess URL Rewriting

URL Dynamique

RewriteEngine on RewriteRule URLMatch URLNew

Réécriture conditionnelle

RewriteEngine on RewriteCond TEST VALEUR RewriteRule URLMatch URLNew

En mettant plusieurs conditions à la suite, un ET logique est effectué entre elles et la réécriture ne sera effectuée que si toutes les conditions sont vraies prises isolément. A la première condition FAUSSE, le moteur de réécriture branche directement après la règle et ne teste pas les conditions suivantes. Si un OU logique est nécessaire, on rajoute le flag [OR] en fin de ligne, en le combinant éventuellement à d'autres flags [NC,OR]

Quelques flags utiles

[L] Lorsque le module de réécriture est actif, les règles sont lues séquentiellement et l'URL est comparée ligne à ligne avec le premier argument de celles-ci jusqu'à la dernière.

Si une réécriture est effectuée, c'est la forme réécrite qui sera utilisée en entrée pour les règles suivantes.
Le flag [L] permet de sortir prématurément de la boucle.
Un autre exemple serait, en début d'une liste de règles :
RewriteRule ^.*.gif$ - [L]
RewriteRule ^.*.jpg$ - [L]

- Nous introduisons ici un nouveau concept, à savoir un second argument vide (ou presque, car il consiste en un seul caractère «-» ).

Cette règle particulière implique qu'il n'y a pas de réécriture, l'URL étant passée sans modification aucune. Elle signale au serveur Apache de passer toutes les URL d'images gif ou jpg sans réécriture, ni traitement successif.

[R]

[R=code]

Dans ces deux formes 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://...)

[R=301,L] 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 - )

[OR] OU de la condition actuelle avec avec la condition suivante
[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. A réserver pour la dernière règle de réécriture. Utilisée le plus souvent avec le flag [L], comme dans [QSA,L]