]> 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.5</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/quickreference.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.5</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.5</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"><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 <pre class="prettyprint lang-config">RewriteRule "\.(png|gif|jpg)" "-" [E=image:1]<br />
319 CustomLog "logs/access_log" combined env=!image</pre>
320
321
322 <p>Notez que le même effet peut être obtenu à l'aide de la directive
323 <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>. Cette technique
324 est présentée à titre d'exemple et non de recommandation.</p>
325 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
326 <div class="section">
327 <h2><a name="flag_end" id="flag_end">END</a></h2>
328 <p>L'utilisation du drapeau [END] permet non seulement de terminer le
329 processus de réécriture en cours (comme [L]), mais aussi d'empêcher tout
330 processus de réécriture ultérieur dans un contexte de répertoire
331 (htaccess).</p>
332
333 <p>Ceci ne s'applique pas aux nouvelles requêtes résultant d'une
334 redirection externe.</p>
335 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
336 <div class="section">
337 <h2><a name="flag_f" id="flag_f">F|forbidden</a></h2>
338 <p>L'utilisation du drapeau [F] permet de faire envoyer par le serveur au
339 client un code de statut "403 Forbidden". Le même effet peut être obtenu à
340 l'aide de la directive <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code>,
341 mais ce drapeau offre plus de souplesse dans l'attribution d'un statut
342 Forbidden.</p>
343
344 <p>La règle suivante va interdire la téléchargement de fichiers
345 <code>.exe</code> depuis votre serveur.</p>
346
347 <pre class="prettyprint lang-config">RewriteRule "\.exe" "-" [F]</pre>
348
349
350 <p>Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce
351 qui signifie que l'URI de la requête n'est pas modifié. Il n'y a aucune
352 raison de réécrire un URI, si vous avez l'intention d'interdire la
353 requête.</p>
354
355 <p>Lorsqu'on utilise [F], [L] est implicite - c'est à dire que la
356 réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.</p>
357
358 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
359 <div class="section">
360 <h2><a name="flag_g" id="flag_g">G|gone</a></h2>
361 <p>Le drapeau [G] permet de faire envoyer par le serveur un code de statut
362 "410 Gone" avec la réponse. Ce code indique qu'une ressource qui était
363 disponible auparavant ne l'est plus actuellement.</p>
364
365 <p>Comme dans le cas du drapeau [F], on utilise en général la syntaxe
366 "-" pour la cible de réécriture lorsqu'on utilise le drapeau [G] :</p>
367
368 <pre class="prettyprint lang-config">RewriteRule "oldproduct" "-" [G,NC]</pre>
369
370
371 <p>Lorsqu'on utilise [G], [L] est implicite - c'est à dire que la
372 réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.</p>
373
374 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
375 <div class="section">
376 <h2><a name="flag_h" id="flag_h">H|handler</a></h2>
377 <p>Force le traitement de la requête résultante par le gestionnaire
378 spécifié. Par exemple, on peut utiliser ce drapeau pour forcer
379 l'interprétation de tous les fichiers sans extension par le gestionnaire
380 php :</p>
381
382 <pre class="prettyprint lang-config">RewriteRule "!\." "-" [H=application/x-httpd-php]</pre>
383
384
385 <p>
386 L'expression rationnelle ci-dessus - <code>!\.</code> - correspond à
387 toute requête qui ne contient pas le caractère <code>.</code>.
388 </p>
389 <p>On peut aussi utiliser ce drapeau pour forcer l'utilisation d'un
390 certain gestionnaire en fonction de certaines conditions. Par exemple,
391 l'extrait suivant utilisé dans un contexte de niveau serveur permet de
392 faire en sorte que les fichiers <code>.php</code> soient
393 <em>affichés</em> par <code>mod_php</code> dans le cas où ils font
394 l'objet d'une requête avec l'extension <code>.phps</code> :</p>
395
396 <pre class="prettyprint lang-config">RewriteRule "^(/source/.+\.php)s$" "$1" [H=application/x-httpd-php-source]</pre>
397
398
399
400 <p>L'expression rationnelle ci-dessus -
401 <code>^(/source/.+\.php)s$</code> - va correspondre à toute requête qui
402 débutera par <code>/source/</code>, continuera par 1 ou n caractères
403 puis par <code>.phps</code>. La référence arrière $1 fait référence à la
404 correspondance capturée entre parenthèses de l'expression
405 rationnelle.</p>
406
407
408 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
409 <div class="section">
410 <h2><a name="flag_l" id="flag_l">L|last</a></h2>
411 <p>Lorsque le drapeau [L] est présent, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
412 arrête le traitement du jeu de règles. Cela signifie dans la plupart des
413 situations que si la règle s'applique, aucune autre règle ne sera
414 traitée. Ce drapeau correspond à la commande Perl <code>last</code>, ou
415 à la commande <code>break</code> en C. Utilisez ce drapeau pour indiquer
416 que la règle courante doit être appliquée immédiatement, sans tenir
417 compte des règles ultérieures.</p>
418
419 <p>Si vous utilisez des règles <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans des fichiers
420 <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
421 notions sur la manière dont les règles sont traitées. Pour simplifier,
422 une fois les règles traitées, la requête réécrite est passée à nouveau
423 au moteur d'interprétation des URLs afin que ce dernier puisse la
424 traiter. Il est possible qu'au cours du traitement de la requête
425 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
426 rencontrés, entraînant un nouveau traitement du jeu de règles depuis le
427 début. Cette situation se présente le plus souvent lorsqu'une des règles
428 provoque une redirection - interne ou externe - ce qui réinitialise le
429 traitement de la requête.</p>
430
431 <p>Si vous utilisez des directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans un de ces contextes,
432 il importe par conséquent de prévoir explicitement des étapes permettant
433 d'éviter un bouclage infini sur les règles,
434 et de ne pas compter seulement sur
435 le drapeau [L] pour terminer l'exécution d'une série de règles, comme
436 décrit ci-dessous.</p>
437
438 <p>Un autre drapeau, [END], permet non seulement d'interrompre le cycle
439 courant du processus de réécriture, mais aussi d'empêcher toute
440 réécriture ultérieure dans le contexte de répertoire (htaccess). Ceci ne
441 s'applique pas aux nouvelles requêtes résultant de redirections
442 externes.</p>
443
444 <p>Dans l'exemple donné ici, toute requête est réécrite en
445 <code>index.php</code>, la requête originale étant ajoutée comme chaîne
446 de requête en argument à <code>index.php</code> ; cependant, la
447 directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> permet de s'assurer que si
448 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>
449
450 <pre class="prettyprint lang-config">RewriteBase "/"
451 RewriteCond "%{REQUEST_URI}" !=/index.php
452 RewriteRule "^(.*)" "/index.php?req=$1" [L,PT]</pre>
453
454 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
455 <div class="section">
456 <h2><a name="flag_n" id="flag_n">N|next</a></h2>
457 <p>Le drapeau [N] provoque un redémarrage du traitement des règles
458 depuis le début, en utilisant le résultat du jeu de règles, sous
459 réserve qu'il existe un point de démarrage ; à utiliser avec précautions
460 car il peut provoquer un bouclage infini.
461 </p>
462 <p>
463 Le drapeau [Next] peut servir, par exemple,
464 à remplacer de manière répétitive
465 une chaîne de caractère ou une lettre dans une requête. Dans l'exemple
466 suivant, chaque occurence de A sera remplacée par B dans la requête, et
467 ceci jusqu'il n'y ait plus de A à remplacer.
468 </p>
469
470 <pre class="prettyprint lang-config">RewriteRule "(.*)A(.*)" "$1B$2" [N]</pre>
471
472
473 <p>Vous pouvez vous représenter ce traitement comme une boucle
474 <code>while</code> : tant que le modèle de la règle correspond (c'est à
475 dire, tant que l'URI contient un <code>A</code>),
476 effectuer la substitution (c'est à dire, remplacer le <code>A</code> par
477 un <code>B</code>).</p>
478
479 <p>A partir de la version 2.5.0, ce module renvoie une erreur après
480 10000 itérations afin d'éviter les boucles infinies. Ce nombre maximum
481 d'itération peut être modifié via le drapeau N.</p>
482 <pre class="prettyprint lang-config"># On veut remplacer 1 caractère à chaque itération de la boucle
483 RewriteRule "(.+)[&gt;&lt;;]$" "$1" [N=32000]
484 # ... ou s'arrêter après 10 itérations
485 RewriteRule "(.+)[&gt;&lt;;]$" "$1" [N=10]</pre>
486
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_nc" id="flag_nc">NC|nocase</a></h2>
491 <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
492 manière insensible à la casse. C'est à dire que cette comparaison
493 s'effectue sans tenir compte des majuscules/minuscules dans l'URI
494 comparé.</p>
495
496 <p>Dans l'exemple suivant, toute requête pour un fichier image sera
497 transmise par Apache à votre serveur d'images dédié. La correspondance est
498 insensible à la casse, si bien que par exemple, <code>.jpg</code> aussi
499 bien que <code>.JPG</code> seront acceptés.</p>
500
501 <pre class="prettyprint lang-config">RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]</pre>
502
503 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
504 <div class="section">
505 <h2><a name="flag_ne" id="flag_ne">NE|noescape</a></h2>
506 <p>Par défaut, les caractères spéciaux, comme <code>&amp;</code> et
507 <code>?</code>, sont convertis en leur équivalent
508 hexadécimal. Le drapeau [NE] permet d'éviter cette conversion.
509 </p>
510
511 <pre class="prettyprint lang-config">RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]</pre>
512
513
514 <p>
515 Dans l'exemple ci-dessus, <code>/anchor/xyz</code> est réécrit en
516 <code>/bigpage.html#xyz</code>. En l'absence du drapeau [NE], le #
517 aurait été converti en son équivalent hexadécimal, <code>%23</code>, ce
518 qui aurait provoqué un code d'erreur "404 Not Found".
519 </p>
520
521 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
522 <div class="section">
523 <h2><a name="flag_ns" id="flag_ns">NS|nosubreq</a></h2>
524 <p>Le drapeau [NS] empêche la règle de s'appliquer aux sous-requêtes.
525 Par exemple, une page incluse au moyen d'une SSI (Server
526 Side Include) est une sous-requête, et vous ne voudrez probablement pas que
527 la réécriture s'applique à ces sous-requêtes. Ainsi, lorsque
528 <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> recherche des informations à propos des
529 fichiers par défaut du répertoire (comme les fichiers
530 <code>index.html</code>), il s'agit d'une sous-requête interne, et vous
531 ne désirez en général pas que ces sous-requêtes soient réécrites. Cette
532 réécriture
533 n'est pas toujours utile pour les sous-requêtes, et peut même causer des
534 erreurs si l'ensemble du jeu de règles est appliqué. L'utilisation de
535 ce drapeau permet d'exclure les règles qui peuvent poser problème.</p>
536
537 <p>Comment déterminer si vous devez utiliser cette règle ou non : si
538 vous préfixez les URLs avec des scripts CGI, afin de forcer leur
539 traitement par le script CGI, vous vous exposez à des problèmes (ou du
540 moins à une surcharge significative) avec les sous-requêtes. Dans ces
541 cas, vous devez utiliser ce drapeau.</p>
542
543 <p>
544 Les images, scripts java, ou fichiers css, chargés en tant que partie
545 d'une page html, ne sont pas des sous-requêtes - le navigateur les
546 appelle sous forme de requêtes HTTP à part entière.
547 </p>
548 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
549 <div class="section">
550 <h2><a name="flag_p" id="flag_p">P|proxy</a></h2>
551 <p>L'utilisation du drapeau [P] entraîne le traitement de la requête par
552 le module <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, et ceci via une requête de
553 mandataire. Par exemple, si vous voulez que toutes les requêtes d'images
554 soient traitées par un serveur d'images annexe, vous pouvez utiliser
555 une règle de ce style :</p>
556
557 <pre class="prettyprint lang-config">RewriteRule "/(.*)\.(jpg|gif|png)$" "http://images.example.com/$1.$2" [P]</pre>
558
559
560 <p>L'utilisation du drapeau [P] provoque aussi l'effet du drapeau [L] -
561 autrement dit, la requête est immédiatement envoyée au mandataire, et
562 toute règle ultérieure sera ignorée.</p>
563
564 <p>
565 Vous devez vous assurer que la chaîne de substitution soit un URI valide
566 (commençant typiquement par <code>http://</code><em>nom-serveur</em>)
567 qui puisse être traitée par le module <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. Dans
568 le cas contraire, le module mandataire vous renverra une erreur.
569 L'utilisation de ce drapeau implémente de manière plus puissante la
570 directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>, pour
571 faire correspondre le contenu distant à l'espace de nommage du serveur
572 local.</p>
573
574 <div class="warning">
575       <h3>Avertissement à propos de la sécurité</h3>
576       <p>Lors de la construction de l'URL cible de la règle, il convient
577       de prendre en compte l'impact en matière de sécurité qu'aura le
578       fait de permettre au client d'influencer le jeu d'URLs pour
579       lesquelles votre serveur agira en tant que mandataire.
580       Assurez-vous que la partie protocole://nom-serveur de l'URL soit
581       fixe, ou ne permette pas au client de l'influencer induement.</p>
582 </div>
583
584 <div class="warning">
585       <h3>Avertissement au sujet des performances</h3>
586       <p>Utiliser ce drapeau fait intervenir <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> sans la gestion des connexions
587       persistantes, ce qui signifie que vous obtiendrez des performances meilleurs si vous utilisez
588       <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>
589       <p>Ceci est du au fait que ce drapeau induit l'utilisation du worker par défaut, qui
590       ne gère pas la mise en commun des connexions.</p>
591       <p>Partout où cela est possible, préférez l'utilisation de ces directives.</p>
592 </div>
593
594 <p>Note: <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> doit être activé pour pouvoir
595 utiliser ce drapeau.</p>
596
597 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
598 <div class="section">
599 <h2><a name="flag_pt" id="flag_pt">PT|passthrough</a></h2>
600
601 <p>
602 Par défaut, la cible (ou chaîne de substitution) d'une règle
603 RewriteRule est sensée être un chemin de fichier. Avec le drapeau [PT],
604 par contre, elle est traitée comme un URI. Autrement dit, avec le
605 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
606 système de mise en correspondance des URLs avec le système de fichiers,
607 de façon à ce que les systèmes de mise en correspondance basés sur les
608 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
609 chance d'accomplir leur tâche.
610 </p>
611
612 <p>
613 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,
614 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é.
615 </p>
616
617 <pre class="prettyprint lang-config">Alias "/icons" "/usr/local/apache/icons"
618 RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]</pre>
619
620
621 <p>
622 Dans l'exemple précédent, en l'absence du drapeau [PT], l'Alias aurait
623 été ignoré, ce qui aurait provoqué une erreur 'File not found'.
624 </p>
625
626 <p>Avec le drapeau <code>PT</code>, le drapeau <code>L</code> est
627 implicite : la réécriture s'arrêtera afin de transmettre la requête à la
628 phase suivante du traitement.</p>
629
630 <p>Notez que le drapeau <code>PT</code> est implicite dans des contextes
631 de répertoire comme les sections <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ou les fichiers
632 <code>.htaccess</code>. Le seul moyen de contourner ceci consiste à
633 réécrire vers <code>-</code>.</p>
634
635 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
636 <div class="section">
637 <h2><a name="flag_qsa" id="flag_qsa">QSA|qsappend</a></h2>
638 <p>
639 Quand l'URI de remplacement contient une chaîne de requête, le
640 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>
641 query string</code> (il s'agit des paramètres éventuellement passés dans l'URL après le
642 caractère <code>?</code>, usuellement pour les formulaires traités par la
643 méthode HTTP <code>GET</code>) existante, et de la remplacer par celle nouvellement créée.
644 Avec le drapeau [QSA], les chaînes de requête peuvent être combinées.
645 </p>
646
647 <p>Considérons la règle suivante :</p>
648
649 <pre class="prettyprint lang-config">RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]</pre>
650
651
652 <p>Avec le drapeau [QSA], une requête pour
653 <code>/pages/123?one=two</code> sera réécrite en
654 <code>/page.php?page=123&amp;one=two</code>. Sans le drapeau [QSA], la
655 même requête sera réécrite en <code>/page.php?page=123</code> -
656 autrement dit, la chaîne de requête (<code>query string</code>) existante sera supprimée.
657 </p>
658 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
659 <div class="section">
660 <h2><a name="flag_qsd" id="flag_qsd">QSD|qsdiscard</a></h2>
661 <p>
662 Lorsque l'URI de la requête contient une chaîne de paramètres, et si
663 l'URI cible n'en contient pas, le comportement par défaut de la
664 directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> consiste à copier cette
665 chaîne de paramètres dans l'URI cible. Avec le drapeau [QSD], la chaîne
666 de paramètres est supprimée.
667 </p>
668
669 <p>Ce drapeau est disponible dans les versions 2.4.0 et supérieures.</p>
670
671 <p>
672 Lorsque les drapeaux [QSD] et [QSA] sont utilisés ensemble, c'est le
673 drapeau [QSD] qui l'emporte.
674 </p>
675
676 <p>
677 Si l'URI cible possède une chaîne de paramètres, le comportement par
678 défaut sera respecté - c'est à dire que la chaîne de paramètres
679 originale sera supprimée et remplacée par la chaîne de paramètres de
680 l'URI cible.
681 </p>
682
683 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
684 <div class="section">
685 <h2><a name="flag_qsl" id="flag_qsl">QSL|qslast</a></h2>
686 <p>
687 Par défaut, le premier (le plus à gauche) point d'interrogation de la
688 substitution sépare le chemin de la requête de sa chaîne de paramètres. Avec le
689 drapeau [QSL] au contraire, les deux composants seront séparés en utilisant le
690 dernier (le plus à droite) point d'interrogation.</p>
691
692 <p>
693 Cela peut s'avérer utile lorsqu'on recherche un fichier dont le nom contient des
694 points d'interrogation. Si aucune chaîne de paramètre n'est présente dans la
695 substitution, il est alors possible d'ajouter un point d'interrogation à la fin
696 et d'utiliser ce drapeau.</p>
697
698 <p>Ce drapeau est disponible à partir de la version 2.4.19 du serveur HTTP
699 Apache.</p>
700
701 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
702 <div class="section">
703 <h2><a name="flag_r" id="flag_r">R|redirect</a></h2>
704 <p>
705 L'utilisation du drapeau [R] provoque l'envoi d'une redirection au
706 navigateur. Si une URL pleinement qualifiée (FQDN - fully qualified domain name)
707  est spécifiée (c'est à dire incluant <code>http://nom-du-serveur/</code>),
708  une redirection sera effectuée vers cette adresse. Dans le cas contraire,
709  le protocole courant, le nom du serveur et le numéro de port seront
710  utilisés pour générer l'URL envoyée avec la redirection.
711 </p>
712
713 <p><em>Tout</em> code de statut de réponse HTTP valide peut être
714 spécifié, en utilisant la syntaxe [R=305], le code de statut 302 étant
715 utilisé par défaut si aucun code n'est spécifié. Le code de statut
716 spécifié n'est pas nécessairement un code de statut
717 de redirection (3xx). Cependant, si le code de statut est en dehors de la plage des codes de
718 redirection (300-399), la chaîne de substitution est entièrement
719 supprimée, et la réécriture s'arrête comme si le drapeau <code>L</code>
720 était utilisé.</p>
721
722 <p>En plus des codes de statut de réponse, vous pouvez spécifier les
723 codes de redirection en utilisant leurs noms symboliques :
724 <code>temp</code> (défaut), <code>permanent</code>, ou
725 <code>seeother</code>.</p>
726
727 <p>
728 Vous utiliserez presque toujours [R] en conjonction avec [L] (c'est à
729 dire [R,L]), car employé seul, le drapeau [R] préfixe l'URI avec
730 <code>http://cet-hôte[:ce-port]</code>, mais passe ensuite cette adresse
731 à la règle suivante, ce qui provoquera le plus souvent des
732 avertissements 'Invalid URI in request'.
733 </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_s" id="flag_s">S|skip</a></h2>
738 <p>Le drapeau [S] sert à sauter des règles que vous ne voulez pas voir
739 exécuter. La syntaxe du drapeau [S] est [S=<em>N</em>], où
740 <em>N</em> correspond au nombre de règles à sauter (sous
741 réserve que la règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> corresponde et qu'au moins
742 une condition <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>
743 préalable soit vérifiée). 
744 Ceci peut s'interpréter comme une instruction
745 <code>goto</code>  dans votre jeu de règles de réécriture. Dans
746 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
747 correspond pas à un fichier existant.</p>
748 <pre class="prettyprint lang-config"># La requête concerne-t-elle un fichier qui n'existe pas ?
749 RewriteCond "%{REQUEST_FILENAME}" !-f
750 RewriteCond "%{REQUEST_FILENAME}" !-d
751 # Si c'est la cas, on saute les deux règles de réécriture suivantes
752 RewriteRule ".?" "-" [S=2]
753
754 RewriteRule "(.*\.gif)" "images.php?$1"
755 RewriteRule "(.*\.html)" "docs.php?$1"</pre>
756
757
758
759
760 <p>Cette technique trouve son utilité dans le fait qu'une directive
761 <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> ne s'applique
762 qu'à la règle qui la suit immédiatement. Ainsi, si vous voulez
763 qu'une directive <code>RewriteCond</code> s'applique à plusieurs règles
764 <code>RewriteRule</code>, une technique possible consiste à inverser ces
765 conditions et ajouter une <code>RewriteRule</code> avec le drapeau [Skip]. Cette technique permet
766 d'élaborer des pseudo-constructions if-then-else : la dernière règle du
767 bloc then contiendra <code>skip=N</code>, où N est le nombre de règles
768 contenues dans le bloc else :</p>
769 <pre class="prettyprint lang-config"># Est-ce que le fichier existe ?
770 RewriteCond "%{REQUEST_FILENAME}" !-f
771 RewriteCond "%{REQUEST_FILENAME}" !-d
772 # Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.
773 RewriteRule ".?" "-" [S=3]
774
775 # Si le fichier existe, alors :
776 RewriteRule "(.*\.gif)" "images.php?$1"
777     RewriteRule "(.*\.html)" "docs.php?$1"
778     # Skip past the "else" stanza.
779     RewriteRule ".?" "-" [S=1]
780 # ELSE...
781 RewriteRule "(.*)" "404.php?file=$1"
782 # END</pre>
783
784
785 <p>Il est probablement plus aisé de définir ce genre de configuration
786 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>
787
788 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
789 <div class="section">
790 <h2><a name="flag_t" id="flag_t">T|type</a></h2>
791 <p>Définit le type MIME de la réponse résultante renvoyée. L'effet est
792 identique à celui de la directive <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code>.</p>
793
794 <p>Par exemple, vous pouvez utiliser la technique suivante pour servir
795 du code source Perl en tant que plein texte, s'il est requis d'une
796 certaine manière :</p>
797
798 <pre class="prettyprint lang-config"># Sert les fichier .pl en tant que plein texte
799 RewriteRule "\.pl$" "-" [T=text/plain]</pre>
800
801
802 <p>Ou encore, si vous possédez une caméra qui produit des fichiers
803 images jpeg sans extension, vous pouvez forcer le renvoi de ces images
804 avec le type MIME correct en se basant sur le nom du fichier :</p>
805
806 <pre class="prettyprint lang-config"># Les fichiers dont le nom contient 'IMG' sont des images jpg.
807 RewriteRule "IMG" "-" [T=image/jpg]</pre>
808
809
810 <p>Notez cependant qu'il s'agit d'un exemple trivial, et que le problème
811 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
812 envisager la possibilité d'une solution alternative à un problème avant
813 d'avoir recours à la réécriture, qui sera toujours moins efficace qu'une
814 solution alternative.</p>
815
816 <p>
817 Dans un contexte de niveau répertoire, n'utilisez que <code>-</code>
818 (tiret) comme substitution, <em>dans toute la séquence de réécriture de
819 mod_rewrite</em>, sinon le type MIME défini avec ce drapeau
820 sera perdu suite à un retraitement interne (y compris les séquences de
821 réécriture suivantes de mod_rewrite). Dans ce contexte, vous pouvez
822 utiliser le drapeau <code>L</code> pour terminer la séquence
823 <em>courante</em> de réécriture de mod_rewrite.</p>
824
825 </div></div>
826 <div class="bottomlang">
827 <p><span>Langues Disponibles: </span><a href="../en/rewrite/flags.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
828 <a href="../fr/rewrite/flags.html" title="Français">&nbsp;fr&nbsp;</a></p>
829 </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>
830 <script type="text/javascript"><!--//--><![CDATA[//><!--
831 var comments_shortname = 'httpd';
832 var comments_identifier = 'http://httpd.apache.org/docs/trunk/rewrite/flags.html';
833 (function(w, d) {
834     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
835         d.write('<div id="comments_thread"><\/div>');
836         var s = d.createElement('script');
837         s.type = 'text/javascript';
838         s.async = true;
839         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
840         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
841     }
842     else {
843         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
844     }
845 })(window, document);
846 //--><!]]></script></div><div id="footer">
847 <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>
848 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.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[//><!--
849 if (typeof(prettyPrint) !== 'undefined') {
850     prettyPrint();
851 }
852 //--><!]]></script>
853 </body></html>