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