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