Serveur Apache HTTP Version 2.4
Ce document d�crit les drapeaux disponibles dans la directive
RewriteRule
, en fournissant
des explications d�taill�es et des exemples.
Le comportement d'une directive RewriteRule
peut �tre modifi� par un ou
plusieurs drapeaux. Les drapeaux sont situ�s en fin de r�gle, entour�s
de crochets, et s�par�s le cas �ch�ant par des virgules.
RewriteRule pattern target [Flag1,Flag2,Flag3]
Chaque drapeau (� quelques exceptions pr�s)
poss�de une forme courte, comme CO
, ainsi qu'une forme longue,
comme cookie
. Bien que
la forme courte soit la plus couramment utilis�e, nous vous recommandons
de vous familiariser avec les drapeaux sous leur forme longue, afin de
bien m�moriser ce que chaque drapeau est suppos� faire.
Certains drapeaux acceptent un ou plusieurs arguments. Les drapeaux ne
sont pas sensibles � la casse.
Les drapeaux qui modifient les m�tadonn�es associ�es � la requ�te (T=, H=, E=) n'ont aucun effet dans un contexte de r�pertoire ou de fichier htaccess, lorsqu'une substitution (autre que '-') est effectu�e au cours de la m�me passe du processus de r��criture.
Chaque drapeau disponible est pr�sent� ici, avec un exemple d'utilisation.
Avec le drapeau [B], la directive RewriteRule
�chappe les caract�res
non-alphanum�riques avant d'appliquer la transformation.
mod_rewrite
doit supprimer les s�quences d'�chappement
des URLs avant leur
mise en correspondance avec le syst�me de fichiers ; les s�quences
d'�chappement sont donc supprim�es des r�f�rences arri�res au moment o�
ces derni�res sont appliqu�es. Avec le drapeau B, les caract�res
non-alphanum�riques des r�f�rences arri�res seront �chapp�s. Consid�rons
par exemple cette r�gle :
RewriteRule "^search/(.*)$" "/search.php?term=$1"
Soit le terme de recherche 'x & y/z' ; un navigateur va le coder
en 'x%20%26%20y%2Fz', transformant la requ�te en
'search/x%20%26%20y%2Fz'. Sans le drapeau B, cette r�gle de r��criture
va r��crire la requ�te en 'search.php?term=x & y/z', ce qui ne
correspond pas � une URL valide et cette derni�re sera encod�e en
search.php?term=x%20&y%2Fz=
, ce qui ne correspond pas �
ce que l'on souhaitait.
Avec le drapeau B, les param�tres sont r�encod�s avant d'�tre pass�s
� l'URL r�sultante, ce qui fournit une r��criture correcte en
/search.php?term=x%20%26%20y%2Fz
.
RewriteRule "^search/(.*)$" "/search.php?term=$1" [B,PT]
Notez que vous devrez peut-�tre aussi d�finir la
directive AllowEncodedSlashes
� On
pour
que cet exemple particulier fonctionne, car httpd ne permet pas les
slashes encod�s dans les URLs, et renvoie une erreur 404 s'il en
rencontre un.
Ce processus d'�chappement est en particulier n�cessaire dans le contexte d'un mandataire, o� l'acc�s au serveur d'arri�re-plan �chouera si on pr�sente � ce dernier une URL non �chapp�e.
Le drapeau [C] ou [chain] indique que la r�gle RewriteRule
est cha�n�e avec la
suivante. Autrement dit, si la r�gle s'applique, elle est trait�e
normalement et passe le contr�le � la r�gle suivante. Par contre, si
elle ne s'applique pas, la r�gle suivante, ainsi que toutes les r�gles
cha�n�es qui suivent, seront saut�es.
Le drapeau [CO], ou [cookie], vous permet de d�finir un cookie
lorsqu'une r�gle RewriteRule
s'applique. Il poss�de trois arguments obligatoires et
quatre arguments optionnels.
La syntaxe compl�te de ce drapeau, avec tous ses attributs, est la suivante :
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
Si un caract�re litt�ral ':' doit �tre ins�rer dans un des champs du cookie, une autre syntaxe est disponible. Pour utiliser cette syntaxe alternative, le contenu du champ "Name" doit �tre pr�c�d� du caract�re ';', et les s�pateurs de champs deviendront des ';'.
[CO=;NAME;VALUE:MOREVALUE;DOMAIN;lifetime;path;secure;httponly]
Vous devez d�clarer un nom, une valeur et un domaine pour que le cookie puisse �tre d�fini.
www.example.com
, ou un
domaine, comme .example.com
. Il doit comporter au moins
deux parties s�par�es par un point. C'est � dire que vous ne pouvez pas
utiliser les valeurs .com
ou .net
. En effet,
ce style de cookie est interdit par le mod�le de s�curit� des cookies.Vous pouvez aussi d�finir les valeurs suivantes :
/clients/
or
/fichiers/telechargement/
./
- c'est � dire l'ensemble du
site web.secure
,
true
, ou 1
, le cookie ne pourra �tre transmis
que dans le cadre d'une connexion s�curis�e (https).HttpOnly
,
true
, ou 1
, le cookie aura son drapeau
HttpOnly
activ�, ce qui signifie qu'il sera inaccessible au
code JavaScript pour les navigateurs qui supportent cette
fonctionnalit�.Voici un exemple :
RewriteEngine On RewriteRule "^/index\.html" "-" [CO=frontdoor:yes:.example.org:1440:/]
Dans l'exemple ci-dessus, la r�gle ne r��crit
pas la requ�te. La cible de r��criture "-"
indique � mod_rewrite de transmettre la requ�te sans
modification. Par contre, il
d�finit un cookie nomm� 'frontdoor' avec une valeur 'yes'. Le cookie est
valide pour tout h�te situ� dans le domaine .example.org
. Sa
dur�e de vie est limit�e � 1440 minutes (24 heures), et il sera renvoy�
pour tous les URIs.
Avec le drapeau DPI, la partie PATH_INFO de l'URI r��crit est supprim�e.
Ce drapeau est disponible dans les versions 2.2.12 et sup�rieures.
Dans un contexte de r�pertoire, l'URI mis en comparaison par chaque
r�gle RewriteRule
est la concat�nation des
valeurs courantes de l'URI et de PATH_INFO.
L'URI courant peut �tre l'URI initial tel qu'il a �t� fourni par le client, le r�sultat d'une passe pr�c�dente du processus de r��criture, ou le r�sultat de la r�gle pr�c�dente dans le processus courant de r��criture.
Par contre, la partie PATH_INFO ajout�e � l'URI avant chaque r�gle ne
refl�te que la valeur de PATH_INFO avant la passe courante du processus
de r��criture. En cons�quence, si de larges portions de l'URI
correspondent et sont traduites via plusieurs directives
RewriteRule
, sans prendre en compte
quelles parties de l'URI provenaient du PATH_INFO courant, l'URI final
pourra se voir ajouter plusieurs copies de PATH_INFO.
Utilisez ce drapeau pour toute substitution o� la pr�sence du PATH_INFO qui r�sultait de la mise en correspondance pr�c�dente de cette requ�te avec le syst�me de fichier n'est pas n�cessaire. Avec ce drapeau, le PATH_INFO �tabli avant que cette passe du processus de r��criture ne d�bute est oubli�. PATH_INFO ne sera pas recalcul� tant que la passe courante du processus de r��criture ne sera pas achev�e. Les r�gles suivantes de cette passe ne verront que le r�sultat direct des substitutions, sans aucun PATH_INFO ajout�.
Avec le drapeau [E], ou [env], vous pouvez d�finir la valeur d'une variable d'environnement. Notez que certaines variables d'environnement peuvent �tre d�finies apr�s le traitement de la r�gle, annulant par la-m�me ce que vous avez d�fini. Voir le document sur les variables d'environnement pour plus de d�tails sur le fonctionnement des variables d'environnement.
La syntaxe compl�te pour ce drapeau est :
[E=!VAR]
VAL
peut comporter des r�f�rences arri�res
($N
ou %N
) qui seront d�velopp�es.
En utilisant la version courte
[E=VAR]
vous pouvez d�finir la variable d'environnement nomm�e
VAR
avec une valeur vide.
La forme
[E=!VAR]
permet d'annuler la d�finition de la variable VAR
.
Les variables d'environnement s'emploient dans diff�rents contextes, comme les programmes CGI, d'autres directives RewriteRule, ou des directives CustomLog.
L'exemple suivant d�finit une variable d'environnement nomm�e 'image' avec une valeur de '1' si l'URI de la requ�te correspond � un fichier image. Cette variable d'environnement est ensuite utilis�e pour exclure une telle requ�te du journal des acc�s.
RewriteRule "\.(png|gif|jpg)" "-" [E=image:1]
CustomLog "logs/access_log" combined env=!image
Notez que le m�me effet peut �tre obtenu � l'aide de la directive
SetEnvIf
. Cette technique
est pr�sent�e � titre d'exemple et non de recommandation.
L'utilisation du drapeau [END] permet non seulement de terminer le processus de r��criture en cours (comme [L]), mais aussi d'emp�cher tout processus de r��criture ult�rieur dans un contexte de r�pertoire (htaccess).
Ceci ne s'applique pas aux nouvelles requ�tes r�sultant d'une redirection externe.
L'utilisation du drapeau [F] permet de faire envoyer par le serveur au
client un code de statut "403 Forbidden". Le m�me effet peut �tre obtenu �
l'aide de la directive Deny
,
mais ce drapeau offre plus de souplesse dans l'attribution d'un statut
Forbidden.
La r�gle suivante va interdire la t�l�chargement de fichiers
.exe
depuis votre serveur.
RewriteRule "\.exe" "-" [F]
Cet exemple utilise la syntaxe "-" pour la cible de r��criture, ce qui signifie que l'URI de la requ�te n'est pas modifi�. Il n'y a aucune raison de r��crire un URI, si vous avez l'intention d'interdire la requ�te.
Lorsqu'on utilise [F], [L] est implicite - c'est � dire que la r�ponse est renvoy�e imm�diatement, et aucune autre r�gle n'est �valu�e.
Le drapeau [G] permet de faire envoyer par le serveur un code de statut "410 Gone" avec la r�ponse. Ce code indique qu'une ressource qui �tait disponible auparavant ne l'est plus actuellement.
Comme dans le cas du drapeau [F], on utilise en g�n�ral la syntaxe "-" pour la cible de r��criture lorsqu'on utilise le drapeau [G] :
RewriteRule "oldproduct" "-" [G,NC]
Lorsqu'on utilise [G], [L] est implicite - c'est � dire que la r�ponse est renvoy�e imm�diatement, et aucune autre r�gle n'est �valu�e.
Force le traitement de la requ�te r�sultante par le gestionnaire sp�cifi�. Par exemple, on peut utiliser ce drapeau pour forcer l'interpr�tation de tous les fichiers sans extension par le gestionnaire php :
RewriteRule "!\." "-" [H=application/x-httpd-php]
L'expression rationnelle ci-dessus - !\.
- correspond �
toute requ�te qui ne contient pas le caract�re .
.
On peut aussi utiliser ce drapeau pour forcer l'utilisation d'un
certain gestionnaire en fonction de certaines conditions. Par exemple,
l'extrait suivant utilis� dans un contexte de niveau serveur permet de
faire en sorte que les fichiers .php
soient
affich�s par mod_php
dans le cas o� ils font
l'objet d'une requ�te avec l'extension .phps
:
RewriteRule "^(/source/.+\.php)s$" "$1" [H=application/x-httpd-php-source]
L'expression rationnelle ci-dessus -
^(/source/.+\.php)s$
- va correspondre � toute requ�te qui
d�butera par /source/
, continuera par 1 ou n caract�res
puis par .phps
. La r�f�rence arri�re $1 fait r�f�rence � la
correspondance captur�e entre parenth�ses de l'expression
rationnelle.
Lorsque le drapeau [L] est pr�sent, mod_rewrite
arr�te le traitement du jeu de r�gles. Cela signifie dans la plupart des
situations que si la r�gle s'applique, aucune autre r�gle ne sera
trait�e. Ce drapeau correspond � la commande Perl last
, ou
� la commande break
en C. Utilisez ce drapeau pour indiquer
que la r�gle courante doit �tre appliqu�e imm�diatement, sans tenir
compte des r�gles ult�rieures.
Si vous utilisez des r�gles RewriteRule
dans des fichiers
.htaccess
ou des sections <Directory>
, il est important d'avoir quelques
notions sur la mani�re dont les r�gles sont trait�es. Pour simplifier,
une fois les r�gles trait�es, la requ�te r��crite est pass�e � nouveau
au moteur d'interpr�tation des URLs afin que ce dernier puisse la
traiter. Il est possible qu'au cours du traitement de la requ�te
r��crite, le fichier .htaccess
ou la section <Directory>
soient � nouveau
rencontr�s, entra�nant un nouveau traitement du jeu de r�gles depuis le
d�but. Cette situation se pr�sente le plus souvent lorsqu'une des r�gles
provoque une redirection - interne ou externe - ce qui r�initialise le
traitement de la requ�te.
Si vous utilisez des directives RewriteRule
dans un de ces contextes,
il importe par cons�quent de pr�voir explicitement des �tapes permettant
d'�viter un bouclage infini sur les r�gles,
et de ne pas compter seulement sur
le drapeau [L] pour terminer l'ex�cution d'une s�rie de r�gles, comme
d�crit ci-dessous.
Un autre drapeau, [END], permet non seulement d'interrompre le cycle courant du processus de r��criture, mais aussi d'emp�cher toute r��criture ult�rieure dans le contexte de r�pertoire (htaccess). Ceci ne s'applique pas aux nouvelles requ�tes r�sultant de redirections externes.
Dans l'exemple donn� ici, toute requ�te est r��crite en
index.php
, la requ�te originale �tant ajout�e comme cha�ne
de requ�te en argument � index.php
; cependant, la
directive RewriteCond
permet de s'assurer que si
la requ�te concerne d�j� index.php
, la directive RewriteRule
sera saut�e.
RewriteBase "/" RewriteCond "%{REQUEST_URI}" "!=/index.php" RewriteRule "^(.*)" "/index.php?req=$1" [L,PT]
Le drapeau [N] provoque un red�marrage du traitement des r�gles depuis le d�but, en utilisant le r�sultat du jeu de r�gles, sous r�serve qu'il existe un point de d�marrage ; � utiliser avec pr�cautions car il peut provoquer un bouclage infini.
Le drapeau [Next] peut servir, par exemple, � remplacer de mani�re r�p�titive une cha�ne de caract�re ou une lettre dans une requ�te. Dans l'exemple suivant, chaque occurence de A sera remplac�e par B dans la requ�te, et ceci jusqu'il n'y ait plus de A � remplacer.
RewriteRule "(.*)A(.*)" "$1B$2" [N]
Vous pouvez vous repr�senter ce traitement comme une boucle
while
: tant que le mod�le de la r�gle correspond (c'est �
dire, tant que l'URI contient un A
),
effectuer la substitution (c'est � dire, remplacer le A
par
un B
).
A partir de la version 2.4.8, ce module renvoie une erreur apr�s 32000 it�rations afin d'�viter les boucles infinies. Ce nombre maximum d'it�ration peut �tre modifi� via le drapeau N.
# On veut remplacer 1 caract�re � chaque it�ration de la boucle RewriteRule "(.+)[><;]$" "$1" [N=64000] # ... ou s'arr�ter apr�s 10 it�rations RewriteRule "(.+)[><;]$" "$1" [N=10]
Avec le drapeau [NC], le mod�le de la r�gle RewriteRule
est compar� � la requ�te de
mani�re insensible � la casse. C'est � dire que cette comparaison
s'effectue sans tenir compte des majuscules/minuscules dans l'URI
compar�.
Dans l'exemple suivant, toute requ�te pour un fichier image sera
transmise par Apache � votre serveur d'images d�di�. La correspondance est
insensible � la casse, si bien que par exemple, .jpg
aussi
bien que .JPG
seront accept�s.
RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]
Par d�faut, les caract�res sp�ciaux, comme &
et
?
, sont convertis en leur �quivalent
hexad�cimal. Le drapeau [NE] permet d'�viter cette conversion.
RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]
Dans l'exemple ci-dessus, /anchor/xyz
est r��crit en
/bigpage.html#xyz
. En l'absence du drapeau [NE], le #
aurait �t� converti en son �quivalent hexad�cimal, %23
, ce
qui aurait provoqu� un code d'erreur "404 Not Found".
Le drapeau [NS] emp�che la r�gle de s'appliquer aux sous-requ�tes.
Par exemple, une page incluse au moyen d'une SSI (Server
Side Include) est une sous-requ�te, et vous ne voudrez probablement pas que
la r��criture s'applique � ces sous-requ�tes. Ainsi, lorsque
mod_dir
recherche des informations � propos des
fichiers par d�faut du r�pertoire (comme les fichiers
index.html
), il s'agit d'une sous-requ�te interne, et vous
ne d�sirez en g�n�ral pas que ces sous-requ�tes soient r��crites. Cette
r��criture
n'est pas toujours utile pour les sous-requ�tes, et peut m�me causer des
erreurs si l'ensemble du jeu de r�gles est appliqu�. L'utilisation de
ce drapeau permet d'exclure les r�gles qui peuvent poser probl�me.
Comment d�terminer si vous devez utiliser cette r�gle ou non : si vous pr�fixez les URLs avec des scripts CGI, afin de forcer leur traitement par le script CGI, vous vous exposez � des probl�mes (ou du moins � une surcharge significative) avec les sous-requ�tes. Dans ces cas, vous devez utiliser ce drapeau.
Les images, scripts java, ou fichiers css, charg�s en tant que partie d'une page html, ne sont pas des sous-requ�tes - le navigateur les appelle sous forme de requ�tes HTTP � part enti�re.
L'utilisation du drapeau [P] entra�ne le traitement de la requ�te par
le module mod_proxy
, et ceci via une requ�te de
mandataire. Par exemple, si vous voulez que toutes les requ�tes d'images
soient trait�es par un serveur d'images annexe, vous pouvez utiliser
une r�gle de ce style :
RewriteRule "/(.*)\.(jpg|gif|png)$" "http://images.example.com/$1.$2" [P]
L'utilisation du drapeau [P] provoque aussi l'effet du drapeau [L] - autrement dit, la requ�te est imm�diatement envoy�e au mandataire, et toute r�gle ult�rieure sera ignor�e.
Vous devez vous assurer que la cha�ne de substitution soit un URI valide
(commen�ant typiquement par http://
nom-serveur)
qui puisse �tre trait�e par le module mod_proxy
. Dans
le cas contraire, le module mandataire vous renverra une erreur.
L'utilisation de ce drapeau impl�mente de mani�re plus puissante la
directive ProxyPass
, pour
faire correspondre le contenu distant � l'espace de nommage du serveur
local.
Lors de la construction de l'URL cible de la r�gle, il convient de prendre en compte l'impact en mati�re de s�curit� qu'aura le fait de permettre au client d'influencer le jeu d'URLs pour lesquelles votre serveur agira en tant que mandataire. Assurez-vous que la partie protocole://nom-serveur de l'URL soit fixe, ou ne permette pas au client de l'influencer induement.
Utiliser ce drapeau fait intervenir mod_proxy
sans la gestion des connexions
persistantes, ce qui signifie que vous obtiendrez des performances meilleurs si vous utilisez
ProxyPass
ou ProxyPassMatch
.
Ceci est du au fait que ce drapeau induit l'utilisation du worker par d�faut, qui ne g�re pas la mise en commun des connexions.
Partout o� cela est possible, pr�f�rez l'utilisation de ces directives.
Note: mod_proxy
doit �tre activ� pour pouvoir
utiliser ce drapeau.
Par d�faut, la cible (ou cha�ne de substitution) d'une r�gle
RewriteRule est sens�e �tre un chemin de fichier. Avec le drapeau [PT],
par contre, elle est trait�e comme un URI. Autrement dit, avec le
drapeau [PT], le r�sultat de la r�gle RewriteRule
est pass� � nouveau au
syst�me de mise en correspondance des URLs avec le syst�me de fichiers,
de fa�on � ce que les syst�mes de mise en correspondance bas�s sur les
chemins de fichiers, comme la directive Alias
, Redirect
, ou ScriptAlias
, par exemple, puissent avoir une
chance d'accomplir leur t�che.
Si par exemple, vous avez un Alias
pour /icons, et une r�gle RewriteRule
qui renvoie vers /icons,
vous devez utiliser le drapeau [PT] pour �tre s�r que l'Alias
sera bien �valu�.
Alias "/icons" "/usr/local/apache/icons" RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]
Dans l'exemple pr�c�dent, en l'absence du drapeau [PT], l'Alias aurait �t� ignor�, ce qui aurait provoqu� une erreur 'File not found'.
Avec le drapeau PT
, le drapeau L
est
implicite : la r��criture s'arr�tera afin de transmettre la requ�te � la
phase suivante du traitement.
Notez que le drapeau PT
est implicite dans des contextes
de r�pertoire comme les sections <Directory>
ou les fichiers
.htaccess
. Le seul moyen de contourner ceci consiste �
r��crire vers -
.
Quand l'URI de remplacement contient une cha�ne de requ�te, le
comportement par d�faut de la r�gle RewriteRule
est de supprimer la
query string
(il s'agit des param�tres �ventuellement pass�s dans l'URL apr�s le
caract�re ?
, usuellement pour les formulaires trait�s par la
m�thode HTTP GET
) existante, et de la remplacer par celle nouvellement cr��e.
Avec le drapeau [QSA], les cha�nes de requ�te peuvent �tre combin�es.
Consid�rons la r�gle suivante :
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
Avec le drapeau [QSA], une requ�te pour
/pages/123?one=two
sera r��crite en
/page.php?page=123&one=two
. Sans le drapeau [QSA], la
m�me requ�te sera r��crite en /page.php?page=123
-
autrement dit, la cha�ne de requ�te (query string
) existante sera supprim�e.
Lorsque l'URI de la requ�te contient une cha�ne de param�tres, et si
l'URI cible n'en contient pas, le comportement par d�faut de la
directive RewriteRule
consiste � copier cette
cha�ne de param�tres dans l'URI cible. Avec le drapeau [QSD], la cha�ne
de param�tres est supprim�e.
Ce drapeau est disponible dans les versions 2.4.0 et sup�rieures.
Lorsque les drapeaux [QSD] et [QSA] sont utilis�s ensemble, c'est le drapeau [QSD] qui l'emporte.
Si l'URI cible poss�de une cha�ne de param�tres, le comportement par d�faut sera respect� - c'est � dire que la cha�ne de param�tres originale sera supprim�e et remplac�e par la cha�ne de param�tres de l'URI cible.
Par d�faut, le premier (le plus � gauche) point d'interrogation de la substitution s�pare le chemin de la requ�te de sa cha�ne de param�tres. Avec le drapeau [QSL] au contraire, les deux composants seront s�par�s en utilisant le dernier (le plus � droite) point d'interrogation.
Cela peut s'av�rer utile lorsqu'on recherche un fichier dont le nom contient des points d'interrogation. Si aucune cha�ne de param�tre n'est pr�sente dans la substitution, il est alors possible d'ajouter un point d'interrogation � la fin et d'utiliser ce drapeau.
Ce drapeau est disponible � partir de la version 2.4.19 du serveur HTTP Apache.
L'utilisation du drapeau [R] provoque l'envoi d'une redirection au
navigateur. Si une URL pleinement qualifi�e (FQDN - fully qualified domain name)
est sp�cifi�e (c'est � dire incluant http://nom-du-serveur/
),
une redirection sera effectu�e vers cette adresse. Dans le cas contraire,
le protocole courant, le nom du serveur et le num�ro de port seront
utilis�s pour g�n�rer l'URL envoy�e avec la redirection.
Tout code de statut de r�ponse HTTP valide peut �tre
sp�cifi�, en utilisant la syntaxe [R=305], le code de statut 302 �tant
utilis� par d�faut si aucun code n'est sp�cifi�. Le code de statut
sp�cifi� n'est pas n�cessairement un code de statut
de redirection (3xx). Cependant, si le code de statut est en dehors de la plage des codes de
redirection (300-399), la cha�ne de substitution est enti�rement
supprim�e, et la r��criture s'arr�te comme si le drapeau L
�tait utilis�.
En plus des codes de statut de r�ponse, vous pouvez sp�cifier les
codes de redirection en utilisant leurs noms symboliques :
temp
(d�faut), permanent
, ou
seeother
.
Vous utiliserez presque toujours [R] en conjonction avec [L] (c'est �
dire [R,L]), car employ� seul, le drapeau [R] pr�fixe l'URI avec
http://cet-h�te[:ce-port]
, mais passe ensuite cette adresse
� la r�gle suivante, ce qui provoquera le plus souvent des
avertissements 'Invalid URI in request'.
Le drapeau [S] sert � sauter des r�gles que vous ne voulez pas voir
ex�cuter. La syntaxe du drapeau [S] est [S=N], o�
N correspond au nombre de r�gles � sauter (sous
r�serve que la r�gle RewriteRule
corresponde).
Ceci peut s'interpr�ter comme une instruction
goto
dans votre jeu de r�gles de r��criture. Dans
l'exemple suivant, nous ne voulons ex�cuter la r�gle RewriteRule
que si l'URI demand� ne
correspond pas � un fichier existant.
# La requ�te concerne-t-elle un fichier qui n'existe pas ? RewriteCond "%{REQUEST_FILENAME}" "!-f" RewriteCond "%{REQUEST_FILENAME}" "!-d" # Si c'est la cas, on saute les deux r�gles de r��criture suivantes RewriteRule ".?" "-" [S=2] RewriteRule "(.*\.gif)" "images.php?$1" RewriteRule "(.*\.html)" "docs.php?$1"
Cette technique trouve son utilit� dans le fait qu'une directive
RewriteCond
ne s'applique
qu'� la r�gle qui la suit imm�diatement. Ainsi, si vous voulez
qu'une directive RewriteCond
s'applique � plusieurs r�gles
RewriteRule
, une technique possible consiste � inverser ces
conditions et ajouter une RewriteRule
avec le drapeau [Skip]. Cette technique permet
d'�laborer des pseudo-constructions if-then-else : la derni�re r�gle du
bloc then contiendra skip=N
, o� N est le nombre de r�gles
contenues dans le bloc else :
# Est-ce que le fichier existe ? RewriteCond "%{REQUEST_FILENAME}" "!-f" RewriteCond "%{REQUEST_FILENAME}" "!-d" # Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza. RewriteRule ".?" "-" [S=3] # Si le fichier existe, alors : RewriteRule "(.*\.gif)" "images.php?$1" RewriteRule "(.*\.html)" "docs.php?$1" # Skip past the "else" stanza. RewriteRule ".?" "-" [S=1] # ELSE... RewriteRule "(.*)" "404.php?file=$1 # END
Il est probablement plus ais� de d�finir ce genre de configuration
via les directives <If>
, <ElseIf>
, et <Else>
.
D�finit le type MIME de la r�ponse r�sultante renvoy�e. L'effet est
identique � celui de la directive AddType
.
Par exemple, vous pouvez utiliser la technique suivante pour servir du code source Perl en tant que plein texte, s'il est requis d'une certaine mani�re :
# Sert les fichier .pl en tant que plein texte RewriteRule "\.pl$" "-" [T=text/plain]
Ou encore, si vous poss�dez une cam�ra qui produit des fichiers images jpeg sans extension, vous pouvez forcer le renvoi de ces images avec le type MIME correct en se basant sur le nom du fichier :
# Les fichiers dont le nom contient 'IMG' sont des images jpg. RewriteRule "IMG" "-" [T=image/jpg]
Notez cependant qu'il s'agit d'un exemple trivial, et que le probl�me
aurait pu �tre r�solu en utilisant � la place la directive <FilesMatch>
. Il faut toujours
envisager la possibilit� d'une solution alternative � un probl�me avant
d'avoir recours � la r��criture, qui sera toujours moins efficace qu'une
solution alternative.
Dans un contexte de niveau r�pertoire, n'utilisez que -
(tiret) comme substitution, dans toute la s�quence de r��criture de
mod_rewrite, sinon le type MIME d�fini avec ce drapeau
sera perdu suite � un retraitement interne (y compris les s�quences de
r��criture suivantes de mod_rewrite). Dans ce contexte, vous pouvez
utiliser le drapeau L
pour terminer la s�quence
courante de r��criture de mod_rewrite.