peuvent avoir un ou plusieurs arguments. Les drapeaux sont insensibles �
<
p>Chaque drapeau (� quelques exceptions pr�s) poss�de une forme longue et une forme courte. 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.</
p>
<
p>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.
<
p>Chaque drapeau disponible est pr�sent� ici, avec un exemple
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_b" id="flag_b">B (�chappement dans les r�f�rences arri�res)</
a></
h2>
<
p>Avec le drapeau [B], la directive <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> �chappe les caract�res
non-alphanum�riques avant d'appliquer la transformation.</
p>
<
p><
code>mod_rewrite</
code> doit supprimer les s�quences d'�chappement
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 :</
p>
<
pre class="prettyprint lang-config">RewriteRule ^search/(.*)$ /
search.php?term=$1</
pre>
<
p>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
<
code>
search.php?term=x%20&y%2Fz=</
code>, ce qui ne correspond pas �
ce que l'on souhaitait.</
p>
<
p>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
<
code>/
search.php?term=x%20%26%20y%2Fz</
code>.</
p>
<
p>Notez que vous devrez peut-�tre aussi d�finir la
directive <
code class="directive"><
a href="/mod/core.html#allowencodedslashes">AllowEncodedSlashes</
a></
code>
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
<
p>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.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_c" id="flag_c">C|chain</
a></
h2>
<
p>Le drapeau [C] ou [chain] indique que la r�gle <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> 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.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_co" id="flag_co">CO|cookie</
a></
h2>
<
p>Le drapeau [CO], ou [cookie], vous permet de d�finir un cookie
lorsqu'une r�gle <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code>
s'applique. Il poss�de trois arguments obligatoires et
quatre arguments optionnels.</
p>
<
p>La syntaxe compl�te de ce drapeau, avec tous ses attributs, est la
<
div class="example"><
p><
code>
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
<
p>Vous devez d�clarer un nom, une valeur et un domaine pour que
le cookie puisse �tre d�fini.</
p>
<
dd>Le domaine pour lequel vous souhaitez que le cookie soit valide. Ce
domaine, comme <
code>
.example.com</
code>. Il doit comporter au moins
deux parties s�par�es par un point. C'est � dire que vous ne pouvez pas
utiliser les valeurs <
code>.com</
code> ou <
code>.net</
code>. En effet,
ce style de cookie est interdit par le mod�le de s�curit� des cookies.</
dd>
<
p>Vous pouvez aussi d�finir les valeurs suivantes :</
p>
<
dd>La dur�e de vie du cookie, en minutes.</
dd>
<
dd>Une valeur de 0 indique une dur�e de vie correspondant � la session
courante du navigateur. Il s'agit de la valeur par d�faut.</
dd>
<
dd>Le chemin, sur le site web concern�, pour lequel le cookie est
valide, du style <
code>/clients/</
code> or
<
dd>La valeur par d�faut est <
code>/</
code> - c'est � dire l'ensemble du
<
dd>Si cet argument a pour valeur <
code>secure</
code>,
<
code>true</
code>, ou <
code>1</
code>, le cookie ne pourra �tre transmis
que dans le cadre d'une connexion s�curis�e (https).</
dd>
<
dd>Si cet argument a pour valeur <
code>HttpOnly</
code>,
<
code>true</
code>, ou <
code>1</
code>, le cookie aura son drapeau
<
code>HttpOnly</
code> activ�, ce qui signifie qu'il sera inaccessible au
code JavaScript pour les navigateurs qui supportent cette
<
p>Voici un exemple :</
p>
<
pre class="prettyprint lang-config">
RewriteRule ^/index\.html - [CO=frontdoor:yes:
.example.org:1440:/]
<
p>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 <
code>
.example.org</
code>. Sa
dur�e de vie est limit�e � 1440 minutes (24 heures), et il sera renvoy�
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_dpi" id="flag_dpi">DPI|discardpath</
a></
h2>
<
p>Avec le drapeau DPI, la partie PATH_INFO de l'URI
r��crit est supprim�e.</
p>
<
p>Ce drapeau est disponible dans les versions 2.2.12 et sup�rieures.</
p>
<
p>Dans un contexte de r�pertoire, l'URI mis en comparaison par chaque
r�gle <
code class="directive">RewriteRule</
code> est la concat�nation des
valeurs courantes de l'URI et de PATH_INFO.</
p>
<
p>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
<
p>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
<
code class="directive">RewriteRule</
code>, 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.</
p>
<
p>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�.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_e" id="flag_e">E|env</
a></
h2>
<
p>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 <
a href="/env.html">document
sur les variables d'environnement</
a> pour plus de d�tails sur le
fonctionnement des variables d'environnement.</
p>
<
p>La syntaxe compl�te pour ce drapeau est :</
p>
<
div class="example"><
p><
code>
<
p><
code>VAL</
code> peut comporter des r�f�rences arri�res
(<
code>$N</
code> ou <
code>%N</
code>) qui seront d�velopp�es.</
p>
<
p>En utilisant la version courte</
p>
<
div class="example"><
p><
code>
<
p>vous pouvez d�finir la variable d'environnement nomm�e
<
code>VAR</
code> avec une valeur vide.</
p>
<
div class="example"><
p><
code>
<
p>permet d'annuler la d�finition de la variable <
code>VAR</
code>.</
p>
<
p>Les variables d'environnement s'emploient dans diff�rents contextes,
comme les programmes CGI, d'autres directives RewriteRule, ou des
directives CustomLog.</
p>
<
p>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.</
p>
<
div class="example"><
p><
code>
RewriteRule \.(png|gif|jpg) - [E=image:1]<
br />
<
p>Notez que le m�me effet peut �tre obtenu � l'aide de la directive
<
code class="directive"><
a href="/mod/mod_setenvif.html#setenvif">SetEnvIf</
a></
code>. Cette technique
est pr�sent�e � titre d'exemple et non de recommandation.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_end" id="flag_end">END</
a></
h2>
<
p>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
<
p>Ceci ne s'applique pas aux nouvelles requ�tes r�sultant d'une
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_f" id="flag_f">F|forbidden</
a></
h2>
<
p>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 �
mais ce drapeau offre plus de souplesse dans l'attribution d'un statut
<
p>La r�gle suivante va interdire la t�l�chargement de fichiers
<
code>.exe</
code> depuis votre serveur.</
p>
<
pre class="prettyprint lang-config">RewriteRule \.exe - [F]</
pre>
<
p>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
<
p>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.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_g" id="flag_g">G|gone</
a></
h2>
<
p>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.</
p>
<
p>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] :</
p>
<
pre class="prettyprint lang-config">RewriteRule oldproduct - [G,NC]</
pre>
<
p>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.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_h" id="flag_h">H|handler</
a></
h2>
<
p>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
<
pre class="prettyprint lang-config">RewriteRule !\. -
L'expression rationnelle ci-dessus - <
code>!\.</
code> - correspond �
toute requ�te qui ne contient pas le caract�re <
code>.</
code>.
<
p>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 <
code>.php</
code> soient
<
em>affich�s</
em> par <
code>mod_php</
code> dans le cas o� ils font
l'objet d'une requ�te avec l'extension <
code>.phps</
code> :</
p>
<
pre class="prettyprint lang-config">
<
p>L'expression rationnelle ci-dessus -
<
code>^(/source/.+\.php)s$</
code> - va correspondre � toute requ�te qui
d�butera par <
code>/source/</
code>, continuera par 1 ou n caract�res
puis par <
code>.phps</
code>. La r�f�rence arri�re $1 fait r�f�rence � la
correspondance captur�e entre parenth�ses de l'expression
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_l" id="flag_l">L|last</
a></
h2>
<
p>Lorsque le drapeau [L] est pr�sent, <
code class="module"><
a href="/mod/mod_rewrite.html">mod_rewrite</
a></
code>
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 <
code>last</
code>, ou
� la commande <
code>break</
code> 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.</
p>
<
p>Si vous utilisez des r�gles <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> dans des fichiers
<
code>.htaccess</
code> ou des sections <
code class="directive"><
a href="/mod/core.html#directory"><Directory></
a></
code>, 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 <
code>.htaccess</
code> ou la section <
code class="directive"><
a href="/mod/core.html#directory"><Directory></
a></
code> 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.</
p>
<
p>Si vous utilisez des directives <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> 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
<
p>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
<
p>Dans l'exemple donn� ici, toute requ�te est r��crite en
<
code>
index.php</
code>, la requ�te originale �tant ajout�e comme cha�ne
de requ�te en argument � <
code>
index.php</
code> ; cependant, la
directive <
code class="directive"><
a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</
a></
code> permet de s'assurer que si
la requ�te concerne d�j� <
code>
index.php</
code>, la directive <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> sera saut�e.</
p>
<
pre class="prettyprint lang-config">
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_n" id="flag_n">N|next</
a></
h2>
<
p>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.
<
pre class="prettyprint lang-config">RewriteRule (.*)A(.*) $1B$2 [N]</
pre>
<
p>Vous pouvez vous repr�senter ce traitement comme une boucle
<
code>while</
code> : tant que le mod�le de la r�gle correspond (c'est �
dire, tant que l'URI contient un <
code>A</
code>),
effectuer la substitution (c'est � dire, remplacer le <
code>A</
code> par
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_nc" id="flag_nc">NC|nocase</
a></
h2>
<
p>Avec le drapeau [NC], le mod�le de la r�gle <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> est compar� � la requ�te de
mani�re insensible � la casse. C'est � dire que cette comparaison
<
p>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, <
code>.jpg</
code> aussi
bien que <
code>.JPG</
code> seront accept�s.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_ne" id="flag_ne">NE|noescape</
a></
h2>
<
p>Par d�faut, les caract�res sp�ciaux, comme <
code>&</
code> et
<
code>?</
code>, sont convertis en leur �quivalent
hexad�cimal. Le drapeau [NE] permet d'�viter cette conversion.
<
pre class="prettyprint lang-config">RewriteRule ^/anchor/(.+) /
bigpage.html#$1 [NE,R]</
pre>
Dans l'exemple ci-dessus, <
code>/
anchor/
xyz</
code> est r��crit en
<
code>/
bigpage.html#xyz</
code>. En l'absence du drapeau [NE], le #
aurait �t� converti en son �quivalent hexad�cimal, <
code>%23</
code>, ce
qui aurait provoqu� un code d'erreur "404 Not Found".
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_ns" id="flag_ns">NS|nosubreq</
a></
h2>
<
p>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
<
code class="module"><
a href="/mod/mod_dir.html">mod_dir</
a></
code> recherche des informations � propos des
fichiers par d�faut du r�pertoire (comme les fichiers
<
code>
index.html</
code>), 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
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.</
p>
<
p>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.</
p>
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.
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_p" id="flag_p">P|proxy</
a></
h2>
<
p>L'utilisation du drapeau [P] entra�ne le traitement de la requ�te par
le module <
code class="module"><
a href="/mod/mod_proxy.html">mod_proxy</
a></
code>, 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 :</
p>
<
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.</
p>
Vous devez vous assurer que la cha�ne de substitution soit un URI valide
(commen�ant typiquement par <
code>http://</
code><
em>nom-serveur</
em>)
qui puisse �tre trait�e par le module <
code class="module"><
a href="/mod/mod_proxy.html">mod_proxy</
a></
code>. 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 <
code class="directive"><
a href="/mod/mod_proxy.html#proxypass">ProxyPass</
a></
code>, pour
faire correspondre le contenu distant � l'espace de nommage du serveur
<
h3>Avertissement � propos de la s�curit�</
h3>
<
p>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.</
p>
<
p>Note: <
code class="module"><
a href="/mod/mod_proxy.html">mod_proxy</
a></
code> doit �tre activ� pour pouvoir
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_pt" id="flag_pt">PT|passthrough</
a></
h2>
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 <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> 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 <
code class="directive"><
a href="/mod/mod_alias.html#alias">Alias</
a></
code>, <
code class="directive"><
a href="/mod/mod_alias.html#redirect">Redirect</
a></
code>, ou <
code class="directive"><
a href="/mod/mod_alias.html#scriptalias">ScriptAlias</
a></
code>, par exemple, puissent avoir une
chance d'accomplir leur t�che.
Si par exemple, vous avez un <
code class="directive"><
a href="/mod/mod_alias.html#alias">Alias</
a></
code> pour /icons, et une r�gle <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> qui renvoie vers /icons,
vous devez utiliser le drapeau [PT] pour �tre s�r que l'<
code class="directive"><
a href="/mod/mod_alias.html#alias">Alias</
a></
code> sera bien �valu�.
<
pre class="prettyprint lang-config">
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'.
<
p>Avec le drapeau <
code>PT</
code>, le drapeau <
code>L</
code> est
implicite : la r��criture s'arr�tera afin de transmettre la requ�te � la
phase suivante du traitement.</
p>
<
p>Notez que le drapeau <
code>PT</
code> est implicite dans des contextes
de r�pertoire comme les sections <
code class="directive"><
a href="/mod/core.html#directory"><Directory></
a></
code> ou les fichiers
<
code>.htaccess</
code>. Le seul moyen de contourner ceci consiste �
r��crire vers <
code>-</
code>.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_qsa" id="flag_qsa">QSA|qsappend</
a></
h2>
Quand l'URI de remplacement contient une cha�ne de requ�te, le
comportement par d�faut de la r�gle <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> est de supprimer la <
code>
query string</
code> (il s'agit des param�tres �ventuellement pass�s dans l'URL apr�s le
caract�re <
code>?</
code>, usuellement pour les formulaires trait�s par la
m�thode HTTP <
code>GET</
code>) existante, et de la remplacer par celle nouvellement cr��e.
Avec le drapeau [QSA], les cha�nes de requ�te peuvent �tre combin�es.
<
p>Consid�rons la r�gle suivante :</
p>
<
pre class="prettyprint lang-config">RewriteRule /pages/(.+) /
page.php?page=$1
<
p>Avec le drapeau [QSA], une requ�te pour
<
code>/
pages/
123?one=two</
code> sera r��crite en
<
code>/
page.php?page=123&one=two</
code>. Sans le drapeau [QSA], la
m�me requ�te sera r��crite en <
code>/
page.php?page=123</
code> -
autrement dit, la cha�ne de requ�te (<
code>query string</
code>) existante sera supprim�e.
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_qsd" id="flag_qsd">QSD|qsdiscard</
a></
h2>
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 <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> 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.
<
p>Ce drapeau est disponible dans les versions 2.4.0 et sup�rieures.</
p>
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
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_r" id="flag_r">R|redirect</
a></
h2>
L'utilisation du drapeau [R] provoque l'envoi d'une redirection au
navigateur. Si une URL pleinement qualifi�e (FQDN - fully qualified domain name)
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.
<
p><
em>Tout</
em> 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 <
code>L</
code>
<
p>En plus des codes de statut de r�ponse, vous pouvez sp�cifier les
codes de redirection en utilisant leurs noms symboliques :
<
code>temp</
code> (d�faut), <
code>permanent</
code>, ou
<
code>seeother</
code>.</
p>
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
<
code>
http://cet-h�te[:ce-port]</
code>, mais passe ensuite cette adresse
� la r�gle suivante, ce qui provoquera le plus souvent des
avertissements 'Invalid URI in request'.
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_s" id="flag_s">S|skip</
a></
h2>
<
p>Le drapeau [S] sert � sauter des r�gles que vous ne voulez pas voir
ex�cuter. La syntaxe du drapeau [S] est [S=<
em>N</
em>], o�
<
em>N</
em> correspond au nombre de r�gles � sauter.
Ceci peut s'interpr�ter comme une instruction
<
code>goto</
code> dans votre jeu de r�gles de r��criture. Dans
l'exemple suivant, nous ne voulons ex�cuter la r�gle <
code class="directive"><
a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</
a></
code> que si l'URI demand� ne
correspond pas � un fichier existant.</
p>
<
pre class="prettyprint lang-config">
# 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
<
p>Cette technique trouve son utilit� dans le fait qu'une directive
<
code class="directive"><
a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</
a></
code> ne s'applique
qu'� la r�gle qui la suit imm�diatement. Ainsi, si vous voulez
qu'une directive <
code>RewriteCond</
code> s'applique � plusieurs r�gles
<
code>RewriteRule</
code>, une technique possible consiste � inverser ces
conditions et ajouter une <
code>RewriteRule</
code> avec le drapeau [Skip]. Cette technique permet
d'�laborer des pseudo-constructions if-then-else : la derni�re r�gle du
bloc then contiendra <
code>skip=N</
code>, o� N est le nombre de r�gles
contenues dans le bloc else :</
p>
<
pre class="prettyprint lang-config">
# 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.
# Si le fichier existe, alors :
# Skip past the "else" stanza.
<
p>Il est probablement plus ais� de d�finir ce genre de configuration
via les directives <
code class="directive"><If></
code>, <
code class="directive"><ElseIf></
code>, et <
code class="directive"><Else></
code>.</
p>
</
div><
div class="top"><
a href="#page-header"><
img alt="top" src="/images/up.gif" /></
a></
div>
<
h2><
a name="flag_t" id="flag_t">T|type</
a></
h2>
<
p>D�finit le type MIME de la r�ponse r�sultante renvoy�e. L'effet est
identique � celui de la directive <
code class="directive"><
a href="/mod/mod_mime.html#addtype">AddType</
a></
code>.</
p>
<
p>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
<
pre class="prettyprint lang-config">
# Sert les fichier .pl en tant que plein texte
<
p>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 :</
p>
<
pre class="prettyprint lang-config">
# Les fichiers dont le nom contient 'IMG' sont des images jpg.
<
p>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 <
code class="directive"><
a href="/mod/core.html#filesmatch"><FilesMatch></
a></
code>. 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.</
p>
Dans un contexte de niveau r�pertoire, n'utilisez que <
code>-</
code>
(tiret) comme substitution, <
em>dans toute la s�quence de r��criture de
mod_rewrite</
em>, 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 <
code>L</
code> pour terminer la s�quence
<
em>courante</
em> de r��criture de mod_rewrite.</
p>
<
p><
span>Langues Disponibles: </
span><
a href="/en/rewrite/flags.html" hreflang="en" rel="alternate" title="English"> en </
a> |
</
div><
div class="top"><
a href="#page-header"><
img src="/images/up.gif" alt="top" /></
a></
div><
div class="section"><
h2><
a id="comments_section" name="comments_section">Commentaires</
a></
h2><
div class="warning"><
strong>Notice:</
strong><
br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered
invalid/
off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <
a href="http://httpd.apache.org/lists.html">mailing lists</
a>.</
div>
var comments_shortname = 'httpd'; d.write('<div id="comments_thread"><\/div>'); d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); //--><!]]></
script></
div><
div id="footer">
if (typeof(prettyPrint) !== 'undefined') {