1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>Les drapeaux de r��criture - Serveur Apache HTTP</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
12<script src="/style/scripts/prettify.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body id="manual-page"><div id="page-header">
17<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p>
18<p class="apache">Serveur Apache HTTP Version 2.2</p>
19<img alt="" src="/images/feather.gif" /></div>
20<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
21<div id="path">
22<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.2</a> &gt; <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Les drapeaux de r��criture</h1>
23<div class="toplang">
24<p><span>Langues Disponibles: </span><a href="/en/rewrite/flags.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25<a href="/fr/rewrite/flags.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
26</div>
27
28<p>Ce document d�crit les drapeaux disponibles dans la directive
29<code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, en fournissant
30des explications d�taill�es et des exemples.</p>
31</div>
32<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#introduction">Introduction</a></li>
33<li><img alt="" src="/images/down.gif" /> <a href="#flag_b">B (�chappement dans les r�f�rences arri�res)</a></li>
34<li><img alt="" src="/images/down.gif" /> <a href="#flag_c">C|chain</a></li>
35<li><img alt="" src="/images/down.gif" /> <a href="#flag_co">CO|cookie</a></li>
36<li><img alt="" src="/images/down.gif" /> <a href="#flag_dpi">DPI|discardpathinfo</a></li>
37<li><img alt="" src="/images/down.gif" /> <a href="#flag_e">E|env</a></li>
38<li><img alt="" src="/images/down.gif" /> <a href="#flag_f">F|forbidden</a></li>
39<li><img alt="" src="/images/down.gif" /> <a href="#flag_g">G|gone</a></li>
40<li><img alt="" src="/images/down.gif" /> <a href="#flag_h">H|handler</a></li>
41<li><img alt="" src="/images/down.gif" /> <a href="#flag_l">L|last</a></li>
42<li><img alt="" src="/images/down.gif" /> <a href="#flag_n">N|next</a></li>
43<li><img alt="" src="/images/down.gif" /> <a href="#flag_nc">NC|nocase</a></li>
44<li><img alt="" src="/images/down.gif" /> <a href="#flag_ne">NE|noescape</a></li>
45<li><img alt="" src="/images/down.gif" /> <a href="#flag_ns">NS|nosubreq</a></li>
46<li><img alt="" src="/images/down.gif" /> <a href="#flag_p">P|proxy</a></li>
47<li><img alt="" src="/images/down.gif" /> <a href="#flag_pt">PT|passthrough</a></li>
48<li><img alt="" src="/images/down.gif" /> <a href="#flag_qsa">QSA|qsappend</a></li>
49<li><img alt="" src="/images/down.gif" /> <a href="#flag_qsd">QSD|qsdiscard</a></li>
50<li><img alt="" src="/images/down.gif" /> <a href="#flag_r">R|redirect</a></li>
51<li><img alt="" src="/images/down.gif" /> <a href="#flag_s">S|skip</a></li>
52<li><img alt="" src="/images/down.gif" /> <a href="#flag_t">T|type</a></li>
53</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="/mod/mod_rewrite.html">Documentation du module</a></li><li><a href="intro.html">Introduction � mod_rewrite</a></li><li><a href="remapping.html">Redirection and remise en
54correspondance</a></li><li><a href="access.html">Contr�le d'acc�s</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="proxy.html">Mise en cache</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="advanced.html">Techniques avanc�es</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
55<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
56<div class="section">
57<h2><a name="introduction" id="introduction">Introduction</a></h2>
58<p>Le comportement d'une directive <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> peut �tre modifi� par un ou
59plusieurs drapeaux. Les drapeaux sont situ�s en fin de r�gle, entour�s
60de crochets, et s�par�s le cas �ch�ant par des virgules.</p>
61<div class="example"><p><code>
62RewriteRule mod�le cible [drapeau1,drapeau2,drapeau3]
63</code></p></div>
64
65<p>Chaque drapeau (� quelques exceptions pr�s)
66poss�de une forme courte, comme <code>CO</code>, ainsi qu'une forme longue,
67comme <code>cookie</code>. Bien que
68la forme courte soit la plus couramment utilis�e, nous vous recommandons
69de vous familiariser avec les drapeaux sous leur forme longue, afin de
70bien m�moriser ce que chaque drapeau est suppos� faire.
71Certains drapeaux acceptent un ou plusieurs arguments. Les drapeaux ne
72sont pas sensibles �&nbsp; la casse.</p>
73
74<p>Les drapeaux qui modifient les m�tadonn�es associ�es � la requ�te
75(T=, H=, E=) n'ont aucun effet dans un contexte de r�pertoire ou de
76fichier htaccess, lorsqu'une substitution (autre que '-') est effectu�e
77au cours de la m�me passe du processus de r��criture.
78</p>
79
80<p>Chaque drapeau disponible est pr�sent� ici, avec un exemple
81d'utilisation.</p>
82</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
83<div class="section">
84<h2><a name="flag_b" id="flag_b">B (�chappement dans les r�f�rences arri�res)</a></h2>
85<p>Avec le drapeau [B], la directive <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> �chappe les caract�res
86non-alphanum�riques avant d'appliquer la transformation.</p>
87
88<p><code>mod_rewrite</code> doit supprimer les s�quences d'�chappement
89des URLs avant leur
90mise en correspondance avec le syst�me de fichiers ; les s�quences
91d'�chappement sont donc supprim�es des r�f�rences arri�res au moment o�
92ces derni�res sont appliqu�es. Avec le drapeau B, les caract�res
93non-alphanum�riques des r�f�rences arri�res seront �chapp�s. Consid�rons
94par exemple cette r�gle :</p>
95
96<pre class="prettyprint lang-config">RewriteRule ^search/(.*)$ /search.php?term=$1</pre>
97
98
99<p>Soit la cha�ne 'x &amp; y/z' ; un navigateur va la coder en
100'x%20%26%20y%2Fz', transformant la requ�te en 'search/x%20%26%20y%2Fz'.
101Sans le drapeau B, la r�gle va intercepter la cha�ne 'search.php?term=x
102&amp; y/z' qui n'est pas une URL valide, et la coder en
103<code>search.php?term=x%20&amp;y%2Fz=</code>, ce qui ne correspond pas
104au r�sultat attendu.</p>
105
106<p>Avec le drapeau B, la r�gle va r�encoder les param�tres avant de les
107passer � l'URL de sortie, ce qui va produire l'URL correcte
108<code>/search.php?term=x%20%26%20y%2Fz</code>.</p>
109
110<p>Notez que vous serez peut-�tre amen� � d�finir la directive
111<code class="directive"><a href="/mod/core.html#allowencodedslashes">AllowEncodedSlashes</a></code> �
112<code>On</code> pour que cet exemple fonctionne, car httpd n'autorise
113pas les slashes encod�s dans les URLs et renvoie une erreur 404 s'il en
114rencontre un.</p>
115
116<p>Ce processus d'�chappement est en particulier n�cessaire dans le
117contexte d'un mandataire, o� l'acc�s au serveur d'arri�re-plan �chouera
118si on pr�sente � ce dernier une URL non �chapp�e.</p>
119
120</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
121<div class="section">
122<h2><a name="flag_c" id="flag_c">C|chain</a></h2>
123<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
124suivante. Autrement dit, si la r�gle s'applique, elle est trait�e
125normalement et passe le contr�le � la r�gle suivante. Par contre, si
126elle ne s'applique pas, la r�gle suivante, ainsi que toutes les r�gles
127cha�n�es qui suivent, seront saut�es.</p>
128
129</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
130<div class="section">
131<h2><a name="flag_co" id="flag_co">CO|cookie</a></h2>
132<p>Le drapeau [CO], ou [cookie], vous permet de d�finir un cookie
133lorsqu'une r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>
134s'applique. Il poss�de trois arguments obligatoires et
135quatre arguments optionnels.</p>
136
137<p>La syntaxe compl�te de ce drapeau, avec tous ses attributs, est la
138suivante :</p>
139
140<div class="example"><p><code>
141[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
142</code></p></div>
143
144<p>Vous devez d�clarer un nom, une valeur et un domaine pour que
145le cookie puisse �tre d�fini.</p>
146
147<dl>
148<dt>Domain</dt>
149<dd>Le domaine pour lequel vous souhaitez que le cookie soit valide. Ce
150peut �tre un nom de serveur, comme <code>www.example.com</code>, ou un
151domaine, comme <code>.example.com</code>. Il doit comporter au moins
152deux parties s�par�es par un point. C'est � dire que vous ne pouvez pas
153utiliser les valeurs <code>.com</code> ou <code>.net</code>. En effet,
154ce style de cookie est interdit par le mod�le de s�curit� des cookies.</dd>
155</dl>
156 
157<p>Vous pouvez aussi d�finir les valeurs suivantes :</p>
158
159<dl>
160<dt>Lifetime</dt>
161<dd>La dur�e de vie du cookie, en minutes.</dd>
162<dd>Une valeur de 0 indique une dur�e de vie correspondant � la session
163courante du navigateur. Il s'agit de la valeur par d�faut.</dd>
164
165<dt>Path</dt>
166<dd>Le chemin, sur le site web concern�, pour lequel le cookie est
167valide, du style <code>/clients/</code> or
168<code>/fichiers/telechargement/</code>.</dd>
169<dd>La valeur par d�faut est <code>/</code> - c'est � dire l'ensemble du
170site web.</dd>
171
172<dt>Secure</dt>
173<dd>Si cet argument a pour valeur <code>secure</code>,
174<code>true</code>, ou <code>1</code>, le cookie ne pourra �tre transmis
175que dans le cadre d'une connexion s�curis�e (https).</dd>
176
177<dt>httponly</dt>
178<dd>Si cet argument a pour valeur <code>HttpOnly</code>,
179<code>true</code>, ou <code>1</code>, le cookie aura son drapeau
180<code>HttpOnly</code> activ�, ce qui signifie qu'il sera inaccessible au
181code JavaScript pour les navigateurs qui supportent cette
182fonctionnalit�.</dd>
183</dl>
184
185<p>Voici un exemple :</p>
186
187<div class="example"><p><code>
188RewriteEngine On<br />
189RewriteRule ^/index\.html - [CO=frontdoor:yes:.example.org:1440:/]
190</code></p></div>
191
192<p>Dans l'exemple ci-dessus, la r�gle ne r��crit
193pas la requ�te. La cible de r��criture "-"
194indique � mod_rewrite de transmettre la requ�te sans
195modification. Par contre, il
196d�finit un cookie nomm� 'frontdoor' avec une valeur 'yes'. Le cookie est
197valide pour tout h�te situ� dans le domaine <code>.example.org</code>. Sa
198dur�e de vie est limit�e � 1440 minutes (24 heures), et il sera renvoy�
199pour tous les URIs.</p>
200
201</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
202<div class="section">
203<h2><a name="flag_dpi" id="flag_dpi">DPI|discardpathinfo</a></h2>
204<p>Avec le drapeau DPI, la partie PATH_INFO de l'URI
205r��crit est supprim�e.</p>
206<p>Ce drapeau est disponible dans les versions 2.2.12 et sup�rieures.</p>
207<p>Dans un contexte de r�pertoire, l'URI mis en comparaison par chaque
208r�gle <code class="directive">RewriteRule</code> est la concat�nation des
209valeurs courantes de l'URI et de PATH_INFO.</p>
210
211<p>L'URI courant peut �tre l'URI initial tel qu'il a �t� fourni par le
212client, le r�sultat d'une passe pr�c�dente du processus de r��criture,
213ou le r�sultat de la r�gle pr�c�dente dans le processus courant de
214r��criture.</p>
215
216<p>Par contre, la partie PATH_INFO ajout�e � l'URI avant chaque r�gle ne
217refl�te que la valeur de PATH_INFO avant la passe courante du processus
218de r��criture. En cons�quence, si de larges portions de l'URI
219correspondent et sont traduites via plusieurs directives
220<code class="directive">RewriteRule</code>, sans prendre en compte
221quelles parties de l'URI provenaient du PATH_INFO courant, l'URI final
222pourra se voir ajouter plusieurs copies de PATH_INFO.</p>
223
224<p>Utilisez ce drapeau pour toute substitution o� la pr�sence du PATH_INFO qui
225r�sultait de la mise en correspondance pr�c�dente de cette requ�te avec
226le syst�me de fichier n'est pas n�cessaire. Avec ce drapeau, le
227PATH_INFO �tabli avant que cette passe du processus de r��criture ne
228d�bute est oubli�. PATH_INFO ne sera pas recalcul� tant que la passe
229courante du processus de r��criture ne sera pas achev�e. Les r�gles
230suivantes de cette passe ne verront que le r�sultat direct des
231substitutions, sans aucun PATH_INFO ajout�.</p>
232</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
233<div class="section">
234<h2><a name="flag_e" id="flag_e">E|env</a></h2>
235<p>Avec le drapeau [E], ou [env], vous pouvez d�finir la valeur d'une
236variable d'environnement. Notez que certaines variables d'environnement
237peuvent �tre d�finies apr�s le traitement de la r�gle, annulant par
238la-m�me ce que vous avez d�fini. Voir le <a href="/env.html">document
239sur les variables d'environnement</a> pour plus de d�tails sur le
240fonctionnement des variables d'environnement.</p>
241
242<p>La syntaxe compl�te pour ce drapeau est :</p>
243
244<div class="example"><p><code>
245[E=!VAR]
246</code></p></div>
247
248<p><code>VAL</code> peut comporter des r�f�rences arri�res
249(<code>$N</code> ou <code>%N</code>) qui seront d�velopp�es.</p>
250
251<p>En utilisant la version courte</p>
252
253<div class="example"><p><code>
254[E=VAR]
255</code></p></div>
256
257<p>vous pouvez d�finir la variable d'environnement nomm�e
258<code>VAR</code> avec une valeur vide.</p>
259
260<p>La forme</p>
261
262<div class="example"><p><code>
263[E=!VAR]
264</code></p></div>
265
266<p>permet d'annuler la d�finition de la variable <code>VAR</code>.</p>
267
268<p>Les variables d'environnement s'emploient dans diff�rents contextes,
269comme les programmes CGI, d'autres directives RewriteRule, ou des
270directives CustomLog.</p>
271
272<p>L'exemple suivant d�finit une variable d'environnement nomm�e 'image'
273avec une valeur de '1' si l'URI de la requ�te correspond � un fichier
274image. Cette variable d'environnement est ensuite utilis�e pour exclure
275une telle requ�te du journal des acc�s.</p>
276
277<div class="example"><p><code>
278RewriteRule \.(png|gif|jpg) - [E=image:1]<br />
279CustomLog logs/access_log combined env=!image
280</code></p></div>
281
282<p>Notez que le m�me effet peut �tre obtenu � l'aide de la directive
283<code class="directive"><a href="/mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>. Cette technique
284est pr�sent�e � titre d'exemple et non de recommandation.</p>
285</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
286<div class="section">
287<h2><a name="flag_f" id="flag_f">F|forbidden</a></h2>
288<p>L'utilisation du drapeau [F] permet de faire envoyer par le serveur au
289client un code de statut "403 Forbidden". Le m�me effet peut �tre obtenu �
290l'aide de la directive <code class="directive"><a href="/mod/mod_authz_host.html#deny">Deny</a></code>,
291mais ce drapeau offre plus de souplesse dans l'attribution d'un statut
292Forbidden.</p>
293
294<p>La r�gle suivante va interdire la t�l�chargement de fichiers
295<code>.exe</code> depuis votre serveur.</p>
296
297<div class="example"><p><code>
298RewriteRule \.exe - [F]
299</code></p></div>
300
301<p>Cet exemple utilise la syntaxe "-" pour la cible de r��criture, ce
302qui signifie que l'URI de la requ�te n'est pas modifi�. Il n'y a aucune
303raison de r��crire un URI, si vous avez l'intention d'interdire la
304requ�te.</p>
305
306<p>Lorsqu'on utilise [F], [L] est implicite - c'est � dire que la
307r�ponse est renvoy�e imm�diatement, et aucune autre r�gle n'est �valu�e.</p>
308
309</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
310<div class="section">
311<h2><a name="flag_g" id="flag_g">G|gone</a></h2>
312<p>Le drapeau [G] permet de faire envoyer par le serveur un code de statut
313"410 Gone" avec la r�ponse. Ce code indique qu'une ressource qui �tait
314disponible auparavant ne l'est plus actuellement.</p>
315
316<p>Comme dans le cas du drapeau [F], on utilise en g�n�ral la syntaxe
317"-" pour la cible de r��criture lorsqu'on utilise le drapeau [G] :</p>
318
319<div class="example"><p><code>
320RewriteRule ancienne-ressource - [G,NC]
321</code></p></div>
322
323<p>Lorsqu'on utilise [F], [L] est implicite - c'est � dire que la
324r�ponse est renvoy�e imm�diatement, et aucune autre r�gle n'est �valu�e.</p>
325
326</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
327<div class="section">
328<h2><a name="flag_h" id="flag_h">H|handler</a></h2>
329<p>Force le traitement de la requ�te r�sultante par le gestionnaire
330sp�cifi�. Par exemple, on peut utiliser ce drapeau pour forcer
331l'interpr�tation de tous les fichiers sans extension par le gestionnaire
332php :</p>
333
334<div class="example"><p><code>
335RewriteRule !\. - [H=application/x-httpd-php]
336</code></p></div>
337
338<p>
339L'expression rationnelle ci-dessus - <code>!\.</code> - correspond �
340toute requ�te qui ne contient pas le caract�re <code>.</code>.
341</p>
342<p>On peut aussi utiliser ce drapeau pour forcer l'utilisation d'un
343certain gestionnaire en fonction de certaines conditions. Par exemple,
344l'extrait suivant utilis� dans un contexte de niveau serveur permet de
345faire en sorte que les fichiers <code>.php</code> soient
346<em>affich�s</em> par <code>mod_php</code> dans le cas o� ils font
347l'objet d'une requ�te avec l'extension <code>.phps</code> :</p>
348
349<div class="example"><p><code>
350RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
351</code></p></div>
352
353
354<p>L'expression rationnelle ci-dessus -
355<code>^(/source/.+\.php)s$</code> - va correspondre � toute requ�te qui
356d�butera par <code>/source/</code>, continuera par 1 ou n caract�res
357puis par <code>.phps</code>. La r�f�rence arri�re $1 fait r�f�rence � la
358correspondance captur�e entre parenth�ses de l'expression
359rationnelle.</p>
360
361
362</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
363<div class="section">
364<h2><a name="flag_l" id="flag_l">L|last</a></h2>
365<p>Lorsque le drapeau [L] est pr�sent, <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>
366arr�te le traitement du jeu de r�gles. Cela signifie dans la plupart des
367situations que si la r�gle s'applique, aucune autre r�gle ne sera
368trait�e. Ce drapeau correspond � la commande Perl <code>last</code>, ou
369� la commande <code>break</code> en C. Utilisez ce drapeau pour indiquer
370que la r�gle courante doit �tre appliqu�e imm�diatement, sans tenir
371compte des r�gles ult�rieures.</p>
372
373<p>Si vous utilisez des r�gles <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans des fichiers
374<code>.htaccess</code> ou des sections <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code>, il est important d'avoir quelques
375notions sur la mani�re dont les r�gles sont trait�es. Pour simplifier,
376une fois les r�gles trait�es, la requ�te r��crite est pass�e � nouveau
377au moteur d'interpr�tation des URLs afin que ce dernier puisse la
378traiter. Il est possible qu'au cours du traitement de la requ�te
379r��crite, le fichier <code>.htaccess</code> ou la section <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> soient � nouveau
380rencontr�s, entra�nant un nouveau traitement du jeu de r�gles depuis le
381d�but. Cette situation se pr�sente le plus souvent lorsqu'une des r�gles
382provoque une redirection - interne ou externe - ce qui r�initialise le
383traitement de la requ�te.</p>
384
385<p>Si vous utilisez des directives <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans un de ces contextes,
386il importe par cons�quent de pr�voir explicitement des �tapes permettant
387d'�viter un bouclage infini sur les r�gles,
388et de ne pas compter seulement sur
389le drapeau [L] pour terminer l'ex�cution d'une s�rie de r�gles, comme
390d�crit ci-dessous.</p>
391
392<p>Un autre drapeau, [END], permet non seulement d'interrompre le cycle
393courant du processus de r��criture, mais aussi d'emp�cher toute
394r��criture ult�rieure dans le contexte de r�pertoire (htaccess). Ceci ne
395s'applique pas aux nouvelles requ�tes r�sultant de redirections
396externes.</p>
397
398<p>Dans l'exemple donn� ici, toute requ�te est r��crite en
399<code>index.php</code>, la requ�te originale �tant ajout�e comme cha�ne
400de requ�te en argument � <code>index.php</code> ; cependant, la
401directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> permet de s'assurer que si
402la 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>
403
404<div class="example"><p><code>
405RewriteBase /<br />
406RewriteCond %{REQUEST_URI} !=/index.php<br />
407RewriteRule ^(.*) /index.php?req=$1 [L,PT]
408</code></p></div>
409</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
410<div class="section">
411<h2><a name="flag_n" id="flag_n">N|next</a></h2>
412<p>Le drapeau [N] provoque un red�marrage du traitement des r�gles
413depuis le d�but, en utilisant le r�sultat du jeu de r�gles, sous
414r�serve qu'il existe un point de d�marrage ; � utiliser avec pr�cautions
415car il peut provoquer un bouclage infini.
416</p>
417<p>
418Le drapeau [Next] peut servir, par exemple,
419� remplacer de mani�re r�p�titive
420une cha�ne de caract�re ou une lettre dans une requ�te. Dans l'exemple
421suivant, chaque occurence de A sera remplac�e par B dans la requ�te, et
422ceci jusqu'il n'y ait plus de A � remplacer.
423</p>
424
425<div class="example"><p><code>
426RewriteRule (.*)A(.*) $1B$2 [N]
427</code></p></div>
428
429<p>Vous pouvez vous repr�senter ce traitement comme une boucle
430<code>while</code> : tant que le mod�le de la r�gle correspond (c'est �
431dire, tant que l'URI contient un <code>A</code>),
432effectuer la substitution (c'est � dire, remplacer le <code>A</code> par
433un <code>B</code>).</p>
434
435</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
436<div class="section">
437<h2><a name="flag_nc" id="flag_nc">NC|nocase</a></h2>
438<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
439mani�re insensible � la casse. C'est � dire que cette comparaison
440s'effectue sans tenir compte des majuscules/minuscules dans l'URI
441compar�.</p>
442
443<p>Dans l'exemple suivant, toute requ�te pour un fichier image sera
444transmise par Apache � votre serveur d'images d�di�. La correspondance est
445insensible � la casse, si bien que par exemple, <code>.jpg</code> aussi
446bien que <code>.JPG</code> seront accept�s.</p>
447
448<div class="example"><p><code>
449RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]
450</code></p></div>
451</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
452<div class="section">
453<h2><a name="flag_ne" id="flag_ne">NE|noescape</a></h2>
454<p>Par d�faut, les caract�res sp�ciaux, comme <code>&amp;</code> et
455<code>?</code>, sont convertis en leur �quivalent
456hexad�cimal. Le drapeau [NE] permet d'�viter cette conversion.
457</p>
458
459<div class="example"><p><code>
460RewriteRule ^/ancre/(.+) /grosse-page.html#$1 [NE,R]
461</code></p></div>
462
463<p>
464Dans l'exemple ci-dessus, <code>/anchor/xyz</code> est r��crit en
465<code>/bigpage.html#xyz</code>. En l'absence du drapeau [NE], le #
466aurait �t� converti en son �quivalent hexad�cimal, <code>%23</code>, ce
467qui aurait provoqu� un code d'erreur "404 Not Found".
468</p>
469
470</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
471<div class="section">
472<h2><a name="flag_ns" id="flag_ns">NS|nosubreq</a></h2>
473<p>Le drapeau [NS] emp�che la r�gle de s'appliquer aux sous-requ�tes.
474Par exemple, une page incluse au moyen d'une SSI (Server
475Side Include) est une sous-requ�te, et vous ne voudrez probablement pas que
476la r��criture s'applique � ces sous-requ�tes. Ainsi, lorsque
477<code class="module"><a href="/mod/mod_dir.html">mod_dir</a></code> recherche des informations � propos des
478fichiers par d�faut du r�pertoire (comme les fichiers
479<code>index.html</code>), il s'agit d'une sous-requ�te interne, et vous
480ne d�sirez en g�n�ral pas que ces sous-requ�tes soient r��crites. Cette
481r��criture
482n'est pas toujours utile pour les sous-requ�tes, et peut m�me causer des
483erreurs si l'ensemble du jeu de r�gles est appliqu�. L'utilisation de
484ce drapeau permet d'exclure les r�gles qui peuvent poser probl�me.</p>
485
486<p>Comment d�terminer si vous devez utiliser cette r�gle ou non : si
487vous pr�fixez les URLs avec des scripts CGI, afin de forcer leur
488traitement par le script CGI, vous vous exposez � des probl�mes (ou du
489moins � une surcharge significative) avec les sous-requ�tes. Dans ces
490cas, vous devez utiliser ce drapeau.</p>
491
492<p>
493Les images, scripts java, ou fichiers css, charg�s en tant que partie
494d'une page html, ne sont pas des sous-requ�tes - le navigateur les
495appelle sous forme de requ�tes HTTP � part enti�re.
496</p>
497</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
498<div class="section">
499<h2><a name="flag_p" id="flag_p">P|proxy</a></h2>
500<p>L'utilisation du drapeau [P] entra�ne le traitement de la requ�te par
501le module <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>, et ceci via une requ�te de
502mandataire. Par exemple, si vous voulez que toutes les requ�tes d'images
503soient trait�es par un serveur d'images annexe, vous pouvez utiliser
504une r�gle de ce style :</p>
505
506<div class="example"><p><code>
507RewriteRule /(.*)\.(jpg|gif|png) http://images.example.com/$1.$2 [P]
508</code></p></div>
509
510<p>L'utilisation du drapeau [P] provoque aussi l'effet du drapeau [L] -
511autrement dit, la requ�te est imm�diatement envoy�e au mandataire, et
512toute r�gle ult�rieure sera ignor�e.</p>
513
514<p>
515Vous devez vous assurer que la cha�ne de substitution soit un URI valide
516(commen�ant typiquement par <code>http://</code><em>nom-serveur</em>)
517qui puisse �tre trait�e par le module <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>. Dans
518le cas contraire, le module mandataire vous renverra une erreur.
519L'utilisation de ce drapeau impl�mente de mani�re plus puissante la
520directive <code class="directive"><a href="/mod/mod_proxy.html#proxypass">ProxyPass</a></code>, pour
521faire correspondre le contenu distant � l'espace de nommage du serveur
522local.</p>
523
524<div class="warning">
525      <h3>Avertissement � propos de la s�curit�</h3>
526      <p>Lors de la construction de l'URL cible de la r�gle, il convient
527      de prendre en compte l'impact en mati�re de s�curit� qu'aura le
528      fait de permettre au client d'influencer le jeu d'URLs pour
529      lesquelles votre serveur agira en tant que mandataire.
530      Assurez-vous que la partie protocole://nom-serveur de l'URL soit
531      fixe, ou ne permette pas au client de l'influencer induement.</p>
532</div>
533
534<p>Note: <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code> doit �tre activ� pour pouvoir
535utiliser ce drapeau.</p>
536
537</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
538<div class="section">
539<h2><a name="flag_pt" id="flag_pt">PT|passthrough</a></h2>
540
541<p>
542Par d�faut, la cible (ou cha�ne de substitution) d'une r�gle
543RewriteRule est sens�e �tre un chemin de fichier. Avec le drapeau [PT],
544par contre, elle est trait�e comme un URI. Autrement dit, avec le
545drapeau [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
546syst�me de mise en correspondance des URLs avec le syst�me de fichiers,
547de fa�on � ce que les syst�mes de mise en correspondance bas�s sur les
548chemins 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
549chance d'accomplir leur t�che.
550</p>
551
552<p>
553Si 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,
554vous 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�.
555</p>
556
557<div class="example"><p><code>
558Alias /icons /usr/local/apache/icons<br />
559RewriteRule /pics/(.+)\.jpg /icons/$1.gif [PT]
560</code></p></div>
561
562<p>
563Dans l'exemple pr�c�dent, en l'absence du drapeau [PT], l'Alias aurait
564�t� ignor�, ce qui aurait provoqu� une erreur 'File not found'.
565</p>
566
567<p>Avec le drapeau <code>PT</code>, le drapeau <code>L</code> est
568implicite : la r��criture s'arr�tera afin de transmettre la requ�te � la
569phase suivante du traitement.</p>
570
571<p>Notez que le drapeau <code>PT</code> est implicite dans des contextes
572de r�pertoire comme les sections <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> ou les fichiers
573<code>.htaccess</code>. Le seul moyen de contourner ceci consiste �
574r��crire vers <code>-</code>.</p>
575
576</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
577<div class="section">
578<h2><a name="flag_qsa" id="flag_qsa">QSA|qsappend</a></h2>
579<p>
580Quand l'URI de remplacement contient une cha�ne de requ�te, le
581comportement 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>
582query string</code> (il s'agit des param�tres �ventuellement pass�s dans l'URL apr�s le
583caract�re <code>?</code>, usuellement pour les formulaires trait�s par la
584m�thode HTTP <code>GET</code>) existante, et de la remplacer par celle nouvellement cr��e.
585Avec le drapeau [QSA], les cha�nes de requ�te peuvent �tre combin�es.
586</p>
587
588<p>Consid�rons la r�gle suivante :</p>
589
590<div class="example"><p><code>
591RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
592</code></p></div>
593
594<p>Avec le drapeau [QSA], une requ�te pour
595<code>/pages/123?one=two</code> sera r��crite en
596<code>/page.php?page=123&amp;one=two</code>. Sans le drapeau [QSA], la
597m�me requ�te sera r��crite en <code>/page.php?page=123</code> -
598autrement dit, la cha�ne de requ�te (<code>query string</code>) existante sera supprim�e.
599</p>
600</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
601<div class="section">
602<h2><a name="flag_qsd" id="flag_qsd">QSD|qsdiscard</a></h2>
603<p>
604Lorsque l'URI de la requ�te contient une cha�ne de param�tres, et si
605l'URI cible n'en contient pas, le comportement par d�faut de la
606directive <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> consiste � copier cette
607cha�ne de param�tres dans l'URI cible. Avec le drapeau [QSD], la cha�ne
608de param�tres est supprim�e.
609</p>
610
611<p>Ce drapeau est disponible dans les versions 2.4.0 et sup�rieures.</p>
612
613<p>
614Lorsque les drapeaux [QSD] et [QSA] sont utilis�s ensemble, c'est le
615drapeau [QSD] qui l'emporte.
616</p>
617
618<p>
619Si l'URI cible poss�de une cha�ne de param�tres, le comportement par
620d�faut sera respect� - c'est � dire que la cha�ne de param�tres
621originale sera supprim�e et remplac�e par la cha�ne de param�tres de
622l'URI cible.
623</p>
624
625</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
626<div class="section">
627<h2><a name="flag_r" id="flag_r">R|redirect</a></h2>
628<p>
629L'utilisation du drapeau [R] provoque l'envoi d'une redirection au
630navigateur. Si une URL pleinement qualifi�e (FQDN - fully qualified domain name)
631 est sp�cifi�e (c'est � dire incluant <code>http://nom-du-serveur/</code>),
632 une redirection sera effectu�e vers cette adresse. Dans le cas contraire,
633 le protocole courant, le nom du serveur et le num�ro de port seront
634 utilis�s pour g�n�rer l'URL envoy�e avec la redirection.
635</p>
636
637<p><em>Tout</em> code de statut de r�ponse HTTP valide peut �tre
638sp�cifi�, en utilisant la syntaxe [R=305], le code de statut 302 �tant
639utilis� par d�faut si aucun code n'est sp�cifi�. Le code de statut
640sp�cifi� n'est pas n�cessairement un code de statut
641de redirection (3xx). Cependant, si le code de statut est en dehors de la plage des codes de
642redirection (300-399), la cha�ne de substitution est enti�rement
643supprim�e, et la r��criture s'arr�te comme si le drapeau <code>L</code>
644�tait utilis�.</p>
645
646<p>En plus des codes de statut de r�ponse, vous pouvez sp�cifier les
647codes de redirection en utilisant leurs noms symboliques :
648<code>temp</code> (d�faut), <code>permanent</code>, ou
649<code>seeother</code>.</p>
650
651<p>
652Vous utiliserez presque toujours [R] en conjonction avec [L] (c'est �
653dire [R,L]), car employ� seul, le drapeau [R] pr�fixe l'URI avec
654<code>http://cet-h�te[:ce-port]</code>, mais passe ensuite cette adresse
655� la r�gle suivante, ce qui provoquera le plus souvent des
656avertissements 'Invalid URI in request'.
657</p>
658
659</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
660<div class="section">
661<h2><a name="flag_s" id="flag_s">S|skip</a></h2>
662<p>Le drapeau [S] sert � sauter des r�gles que vous ne voulez pas voir
663ex�cuter. La syntaxe du drapeau skip est [S=<em>N</em>], o�
664<em>N</em> correspond au nombre de r�gles � sauter (sous
665r�serve que la r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> corresponde).
666Ceci peut s'interpr�ter comme une instruction
667<code>goto</code>  dans votre jeu de r�gles de r��criture. Dans
668l'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
669correspond pas � un fichier existant.</p>
670
671<div class="example"><p><code>
672# La requ�te concerne-t-elle un fichier qui n'existe pas ?<br />
673RewriteCond %{REQUEST_FILENAME} !-f<br />
674RewriteCond %{REQUEST_FILENAME} !-d<br />
675# Si c'est la cas, on saute les deux r�gles de r��criture suivantes<br />
676RewriteRule .? - [S=2]<br />
677RewriteRule (.*\.gif) images.php?$1<br />
678RewriteRule (.*\.html) docs.php?$1
679</code></p></div>
680
681<p>Cette technique trouve son utilit� dans le fait qu'une directive
682<code class="directive"><a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> ne s'applique
683qu'� la r�gle qui la suit imm�diatement. Ainsi, si vous voulez
684qu'une directive <code>RewriteCond</code> s'applique � plusieurs r�gles
685<code>RewriteRule</code>, une technique possible consiste � inverser ces
686conditions et � ajouter une <code>RewriteRule</code> avec le drapeau [Skip]. Cette technique permet
687d'�laborer des pseudo-constructions if-then-else : la derni�re r�gle du
688bloc then contiendra <code>skip=N</code>, o� N est le nombre de r�gles
689contenues dans le bloc else :</p>
690<div class="example"><p><code>
691# Est-ce que le fichier existe ?<br />
692RewriteCond %{REQUEST_FILENAME} !-f<br />
693RewriteCond %{REQUEST_FILENAME} !-d<br />
694
695# Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.<br />
696RewriteRule .? - [S=3]<br />
697<br />
698# Si le fichier existe, alors :
699<span class="indent">
700	RewriteRule (.*\.gif) images.php?$1<br />
701	RewriteRule (.*\.html) docs.php?$1<br />
702	# Skip past the "else" stanza.<br />
703	RewriteRule .? - [S=1]<br />
704</span>
705# ELSE...
706<span class="indent">
707	RewriteRule (.*) 404.php?file=$1<br />
708</span>
709# END
710</code></p></div>
711
712</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
713<div class="section">
714<h2><a name="flag_t" id="flag_t">T|type</a></h2>
715<p>D�finit le type MIME de la r�ponse r�sultante renvoy�e. L'effet est
716identique � celui de la directive <code class="directive"><a href="/mod/mod_mime.html#addtype">AddType</a></code>.</p>
717
718<p>Par exemple, vous pouvez utiliser la technique suivante pour servir
719du code source Perl en tant que plein texte, s'il est requis d'une
720certaine mani�re :</p>
721
722<div class="example"><p><code>
723# Sert les fichier .pl en tant que plein texte<br />
724RewriteRule \.pl$ - [T=text/plain]
725</code></p></div>
726
727<p>Ou encore, si vous poss�dez une cam�ra qui produit des fichiers
728images jpeg sans extension, vous pouvez forcer le renvoi de ces images
729avec le type MIME correct en se basant sur le nom du fichier :</p>
730
731<div class="example"><p><code>
732# Les fichiers dont le nom contient 'IMG' sont des images jpg.<br />
733RewriteRule IMG - [T=image/jpg]
734</code></p></div>
735
736<p>Notez cependant qu'il s'agit d'un exemple trivial, et que le probl�me
737aurait pu �tre r�solu en utilisant � la place la directive <code class="directive"><a href="/mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>. Il faut toujours
738envisager la possibilit� d'une solution alternative � un probl�me avant
739d'avoir recours � la r��criture, qui sera toujours moins efficace qu'une
740solution alternative.</p>
741
742<p>
743Dans un contexte de niveau r�pertoire, n'utilisez que <code>-</code>
744(tiret) comme substitution, <em>dans toute la s�quence de r��criture de
745mod_rewrite</em>, sinon le type MIME d�fini avec ce drapeau
746sera perdu suite � un retraitement interne (y compris les s�quences de
747r��criture suivantes de mod_rewrite). Dans ce contexte, vous pouvez
748utiliser le drapeau <code>L</code> pour terminer la s�quence
749<em>courante</em> de r��criture de mod_rewrite.</p>
750
751</div></div>
752<div class="bottomlang">
753<p><span>Langues Disponibles: </span><a href="/en/rewrite/flags.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
754<a href="/fr/rewrite/flags.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
755</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&amp;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>
756<script type="text/javascript"><!--//--><![CDATA[//><!--
757var comments_shortname = 'httpd';
758var comments_identifier = 'http://httpd.apache.org/docs/2.2/rewrite/flags.html';
759(function(w, d) {
760    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
761        d.write('<div id="comments_thread"><\/div>');
762        var s = d.createElement('script');
763        s.type = 'text/javascript';
764        s.async = true;
765        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
766        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
767    }
768    else { 
769        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
770    }
771})(window, document);
772//--><!]]></script></div><div id="footer">
773<p class="apache">Copyright 2013 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
774<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
775if (typeof(prettyPrint) !== 'undefined') {
776    prettyPrint();
777}
778//--><!]]></script>
779</body></html>