]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_rewrite.xml.fr
xforms
[apache] / docs / manual / mod / mod_rewrite.xml.fr
1 <?xml version="1.0"?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision : 1403476 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <modulesynopsis metafile="mod_rewrite.xml.meta">
26
27 <name>mod_rewrite</name>
28
29 <description>Ce module fournit un moteur de r&eacute;&eacute;criture &agrave; base de
30 r&egrave;gles permettant de r&eacute;&eacute;crire les URLs des requ&ecirc;tes
31 &agrave; la vol&eacute;e</description>
32
33 <status>Extension</status>
34 <sourcefile>mod_rewrite.c</sourcefile>
35 <identifier>rewrite_module</identifier>
36
37 <summary>
38       <p>Le module <module>mod_rewrite</module> utilise un moteur de
39       r&eacute;&eacute;criture &agrave; base de r&egrave;gles, bas&eacute; sur un interpr&eacute;teur
40       d'expressions rationnelles PCRE, pour r&eacute;&eacute;crire les URLs &agrave; la vol&eacute;e. Par
41       d&eacute;faut, <module>mod_rewrite</module> met en correspondance une URL
42       avec le syst&egrave;me de fichiers. Cependant, on peut aussi l'utiliser
43       pour rediriger une URL vers une autre URL, ou pour invoquer une
44       requ&ecirc;te interne &agrave; destination du mandataire.</p>
45       <p><module>mod_rewrite</module> fournit une m&eacute;thode souple et
46       puissante pour manipuler les URLs en utilisant un nombre illimit&eacute;
47       de r&egrave;gles. Chaque r&egrave;gle peut &ecirc;tre associ&eacute;e &agrave; un nombre illimit&eacute; de
48       conditions, afin de vous permettre de r&eacute;&eacute;crire les URLs en
49       fonction de variables du serveur, de variables d'environnement,
50       d'en-t&ecirc;tes HTTP, ou de rep&egrave;res temporels.</p>
51       <p><module>mod_rewrite</module> agit sur la totalit&eacute; de l'URL, y
52       compris la partie chemin. Une r&egrave;gle de r&eacute;&eacute;criture peut &ecirc;tre
53       invoqu&eacute;e dans <code>httpd.conf</code> ou dans un fichier
54       <code>.htaccess</code>. Le chemin g&eacute;n&eacute;r&eacute; par une r&egrave;gle de
55       r&eacute;&eacute;criture peut inclure une cha&icirc;ne de param&egrave;tres, ou peut renvoyer
56       vers un traitement secondaire interne, une redirection vers une
57       requ&ecirc;te externe ou vers le mandataire interne.</p>
58
59       <p>Vous trouverez d'avantage de d&eacute;tails, discussions et exemples
60       dans la
61       <a href="../rewrite/">documentation d&eacute;taill&eacute;e
62       sur mod_rewrite</a>.</p>
63 </summary>
64
65 <section id="logging"><title>Journalisation</title>
66
67     <p><module>mod_rewrite</module> offre une journalisation d&eacute;taill&eacute;e
68     de ses actions aux niveaux de journalisation <code>trace1</code> &agrave;
69     <code>trace8</code>. Le niveau de journalisation peut &ecirc;tre d&eacute;fini de
70     mani&egrave;re sp&eacute;cifique &agrave; <module>mod_rewrite</module> via la directive
71     <directive module="core">LogLevel</directive> : jusqu'au niveau
72     <code>debug</code> aucune action n'est journalis&eacute;e, alors qu'elles
73     le sont pratiquement toutes au niveau <code>trace8</code>.</p>
74
75     <note>
76       L'utilisation d'un niveau de journalisation &eacute;lev&eacute; pour
77       <module>mod_rewrite</module> va ralentir votre serveur HTTP Apache
78       de mani&egrave;re dramatique ! N'utilisez un niveau de journalisation
79       sup&eacute;rieur &agrave; <code>trace2</code> qu'&agrave; des fins de d&eacute;bogage !
80     </note>
81
82     <example><title>Exemple</title>
83     <highlight language="config">
84       LogLevel alert rewrite:trace3
85       </highlight>
86     </example>
87
88     <note><title>RewriteLog</title>
89       <p>Ceux qui sont familiers avec les versions pr&eacute;c&eacute;dentes de
90       <module>mod_rewrite</module> vont probablement rechercher en vain les
91       directives <code>RewriteLog</code> et
92       <code>RewriteLogLevel</code>. Elles ont &eacute;t&eacute; en effet remplac&eacute;es
93       par une configuration de la journalisation par module, comme
94       mentionn&eacute; plus haut.
95       </p>
96
97       <p>Pour extraire les traces sp&eacute;cifiques &agrave;
98       <module>mod_rewrite</module>, affichez le fichier journal en
99       redirigeant la sortie vers grep :</p>
100     <example>
101     tail -f error_log|fgrep '[rewrite:'
102     </example>
103     </note>
104
105 </section>
106
107 <directivesynopsis>
108 <name>RewriteEngine</name>
109 <description>Active ou d&eacute;sactive l'ex&eacute;cution du
110 moteur de r&eacute;&eacute;criture</description>
111 <syntax>RewriteEngine on|off</syntax>
112 <default>RewriteEngine off</default>
113 <contextlist><context>server config</context><context>virtual host</context>
114 <context>directory</context><context>.htaccess</context></contextlist>
115 <override>FileInfo</override>
116
117 <usage>
118
119       <p>La directive <directive>RewriteEngine</directive> active ou
120       d&eacute;sactive l'ex&eacute;cution du moteur de r&eacute;&eacute;criture. Si sa valeur est
121       <code>off</code>, ce module n'ex&eacute;cutera aucun traitement et ne
122       mettra pas &agrave; jour les variables d'environnement
123       <code>SCRIPT_URx</code>.</p>
124
125       <p>Pour d&eacute;sactiver le module, il vaut mieux utiliser cette
126       directive que commenter toutes les directives <directive
127       module="mod_rewrite">RewriteRule</directive> !</p>
128
129       <p>Notez que les  h&ocirc;tes virtuels n'h&eacute;ritent pas des
130       configurations de r&eacute;&eacute;criture. Ceci implique que vous devez
131       ins&eacute;rer une directive <code>RewriteEngine on</code> dans chaque
132       h&ocirc;te virtuel pour lequel vous souhaitez utiliser des r&egrave;gles
133       de r&eacute;&eacute;criture.</p>
134
135       <p>Les directives <directive>RewriteMap</directive> du type
136       <code>prg</code> ne sont pas prises en compte au cours de
137       l'initialisation du serveur si elle ont &eacute;t&eacute; d&eacute;finies dans un
138       contexte o&ugrave; la directive <directive>RewriteEngine</directive> n'a
139       pas &eacute;t&eacute; d&eacute;finie &agrave; <code>on</code>.</p>
140
141 </usage>
142
143 </directivesynopsis>
144
145 <directivesynopsis>
146 <name>RewriteOptions</name>
147 <description>Configure certaines options sp&eacute;ciales
148 pour le moteur de r&eacute;&eacute;criture</description>
149 <syntax>RewriteOptions <var>Options</var></syntax>
150 <contextlist><context>server config</context><context>virtual host</context>
151 <context>directory</context><context>.htaccess</context></contextlist>
152 <override>FileInfo</override>
153 <compatibility><code>MaxRedirects</code> n'est plus disponible depuis
154 la version version 2.1</compatibility>
155 <usage>
156
157       <p>La directive <directive>RewriteOptions</directive> d&eacute;finit
158       certaines options sp&eacute;ciales pour la configuration au niveau du
159       serveur ou du r&eacute;pertoire. La cha&icirc;ne de caract&egrave;res <em>Option</em>
160       ne peut actuellement prendre qu'une des valeurs suivantes :</p>
161
162       <dl>
163       <dt><code>Inherit</code></dt>
164       <dd>
165
166       <p>Ceci force la configuration locale &agrave; h&eacute;riter de la
167       configuration du niveau sup&eacute;rieur. Dans le contexte des h&ocirc;tes
168       virtuels, cela signifie que les correspondances, conditions et
169       r&egrave;gles du serveur principal sont h&eacute;rit&eacute;es. Dans le contexte des
170       r&eacute;pertoires, cela signifie que les conditions et r&egrave;gles de la
171       configuration <code>.htaccess</code> ou les sections <directive
172       type="section" module="core">Directory</directive> du r&eacute;pertoire
173       parent sont h&eacute;rit&eacute;es. Les r&egrave;gles h&eacute;rit&eacute;es sont virtuellement
174       copi&eacute;es dans la section o&ugrave; cette directive est utilis&eacute;e. Si elles
175       sont utilis&eacute;es avec des r&egrave;gles locales, les r&egrave;gles h&eacute;rit&eacute;es sont
176       plac&eacute;es apr&egrave;s ces derni&egrave;res. La place de cette directive - avant
177       ou apr&egrave;s les r&egrave;gles locales - n'a aucune influence sur ce
178       comportement. Si des r&egrave;gles locales ont forc&eacute; l'arr&ecirc;t de la
179       r&eacute;&eacute;criture, les r&egrave;gles h&eacute;rit&eacute;es ne seront pas trait&eacute;es.</p>
180
181       <note type="warning">
182       Les r&egrave;gles h&eacute;rit&eacute;es du niveau parent sont appliqu&eacute;es
183       <strong>after</strong> apr&egrave;s les r&egrave;gles sp&eacute;cifi&eacute;es dans le niveau
184       enfant.
185       </note>
186       </dd>
187
188       <dt><code>InheritBefore</code></dt>
189       <dd>
190       <p>M&ecirc;me effet que l'option <code>Inherit</code> ci-dessus, mais
191       les r&egrave;gles sp&eacute;cifi&eacute;es dans le niveau parent s'appliquent
192       <strong>avant</strong> les r&egrave;gles sp&eacute;cifi&eacute;es dans le niveau
193       enfant. Disponible depuis la version 2.3.10 du serveur HTTP
194       Apache.</p>
195       </dd>
196
197       <dt><code>AllowNoSlash</code></dt>
198       <dd>
199       <p>Par d&eacute;faut, <module>mod_rewrite</module> ignore les URLs qui
200       correspondent &agrave; un r&eacute;pertoire sur disque, mais ne comportent pas
201       de slash final, afin que le module <module>mod_dir</module>
202       redirige le client vers l'URL canonique avec un slash final.</p>
203       
204       <p>Lorsque la directive <directive
205       module="mod_dir">DirectorySlash</directive> est d&eacute;finie &agrave; off, il
206       est possible de sp&eacute;cifier l'option <code>AllowNoSlash</code> pour
207       s'assurer que les r&egrave;gles de r&eacute;&eacute;criture ne soient plus ignor&eacute;es.
208       Si on le souhaite, cette option permet de faire s'appliquer des
209       r&egrave;gles de r&eacute;&eacute;criture qui correspondent &agrave; un r&eacute;pertoire sans slash
210       final au sein de fichiers .htaccess. Elle est disponible &agrave;
211       partir de la version 2.4.0 du serveur HTTP Apache.</p>
212       </dd>
213
214       <dt><code>AllowAnyURI</code></dt>
215       <dd>
216
217       <p>A partir de la version 2.2.22 de httpd, lorsqu'une directive <directive
218       module="mod_rewrite">RewriteRule</directive> se situe dans un
219       contexte de <code>serveur virtuel</code> ou de serveur principal,
220       <module>mod_rewrite</module> ne traitera les r&egrave;gles de r&eacute;&eacute;criture
221       que si l'URI de la requ&ecirc;te respecte la syntaxe d'un <a
222       href="./directive-dict.html#Syntax">chemin URL</a>. Ceci permet
223       d'&eacute;viter certains probl&egrave;mes de s&eacute;curit&eacute; o&ugrave; des r&egrave;gles
224       particuli&egrave;res pourraient permettre  des d&eacute;veloppements de mod&egrave;les
225       inattendus (voir <a
226       href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3368">CVE-2011-3368</a>
227       et <a
228       href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4317">CVE-2011-4317</a>).
229       Pour s'affranchir de la restriction relative &agrave; la syntaxe des chemins URL, on peut
230       utiliser l'option <code>AllowAnyURI</code>, afin de permettre &agrave;
231       <module>mod_rewrite</module> d'appliquer le jeu de r&egrave;gles &agrave; toute
232       cha&icirc;ne de requ&ecirc;te URI, sans v&eacute;rifier si cette derni&egrave;re respecte la
233       grammaire des chemins URL d&eacute;finie dans la sp&eacute;cification HTTP.</p>
234
235       <note type="warning">
236       <title>Avertissement &agrave; propos de la s&eacute;curit&eacute;</title> 
237
238       <p>L'utilisation de cette option rendra le serveur vuln&eacute;rable &agrave;
239       certains probl&egrave;mes de s&eacute;curit&eacute; si les r&egrave;gles de r&eacute;&eacute;critures
240       concern&eacute;es n'ont pas &eacute;t&eacute; r&eacute;dig&eacute;es avec soin. Il est par cons&eacute;quent
241       <strong>fortement recommand&eacute;</strong> de ne pas utiliser cette
242       option. En particulier, pr&ecirc;tez attention aux cha&icirc;nes en entr&eacute;e contenant le
243       caract&egrave;re '<code>@</code>', qui peuvent modifier l'interpr&eacute;tation
244       de l'URI r&eacute;&eacute;crite, comme indiqu&eacute; dans les liens ci-dessus.</p>
245       </note>
246       </dd>
247
248       </dl>
249 </usage>
250
251 </directivesynopsis>
252
253 <directivesynopsis>
254 <name>RewriteMap</name>
255 <description>D&eacute;finit une fonction de mise en correspondance pour la
256 recherche de mots-cl&eacute;s</description>
257 <syntax>RewriteMap <em>nom de la correspondance</em> <em>type de
258 correspondance</em>:<em>source de la correspondance</em>
259 </syntax>
260 <contextlist><context>server config</context><context>virtual host</context>
261 </contextlist>
262 <compatibility>Il est possible de choisir entre plusieurs types de
263 bases de donn&eacute;es depuis la version 2.0.41 du serveur HTTP Apache</compatibility>
264
265 <usage>
266       <p>La directive <directive>RewriteMap</directive> d&eacute;finit une
267       <em>Table de correspondance pour la r&eacute;&eacute;criture</em> que les
268       fonctions de mise en correspondance
269       peuvent utiliser dans les cha&icirc;nes de substitution des r&egrave;gles
270       pour ins&eacute;rer/substituer des champs en recherchant des mots-cl&eacute;s.
271       La source utilis&eacute;e pour cette recherche peut &ecirc;tre de plusieurs
272       types.</p>
273
274       <p><a id="mapfunc" name="mapfunc"><em>nom de la
275       correspondance</em></a> est le nom de la table de correspondance
276       et servira &agrave; sp&eacute;cifier une fonction de mise en correspondance
277       pour les cha&icirc;nes de substitution d'une r&egrave;gle de r&eacute;&eacute;criture selon
278       une des constructions suivantes :</p>
279
280       <p class="indent">
281         <strong><code>${</code> <em>nom de la
282       correspondance</em> <code>:</code>
283         <em>mot-cl&eacute;</em> <code>}</code><br />
284          <code>${</code> <em>nom de la
285       correspondance</em> <code>:</code>
286         <em>mot-cl&eacute;</em> <code>|</code> <em>valeur par d&eacute;faut</em>
287         <code>}</code></strong>
288       </p>
289
290       <p>Lorsqu'une telle construction est rencontr&eacute;e, la table de
291       correspondance <em>Nom de la correspondance</em> est consult&eacute;e
292       et la cl&eacute; <em>mot-cl&eacute;</em> recherch&eacute;e. Si la cl&eacute; est trouv&eacute;e, la
293       construction est remplac&eacute;e par
294       la <em>valeur de remplacement</em>. Si la cl&eacute; n'est pas trouv&eacute;e,
295       elle est remplac&eacute;e par la <em>valeur par d&eacute;faut</em>, ou par une
296       cha&icirc;ne vide si aucune <em>valeur par d&eacute;faut</em> n'est
297       sp&eacute;cifi&eacute;e. La valeur vide se comporte comme si la
298       cl&eacute; &eacute;tait absente ; il est donc impossible de distinguer une
299       valeur vide d'une absence de cl&eacute;.</p>
300
301       <p>Par exemple, vous pouvez d&eacute;finir une directive
302       <directive>RewriteMap</directive> comme suit </p>
303
304       <highlight language="config">
305       RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt
306       </highlight>
307
308       <p>Vous pourrez ensuite utiliser cette table dans une
309       directive <directive>RewriteRule</directive> comme suit :</p>
310
311       <highlight language="config">
312       RewriteRule ^/ex/(.*) ${map-exemple:$1}
313       </highlight>
314
315       <p>Les combinaisons suivantes pour <em>type de correspondance</em>
316       et <em>source de la correspondance</em>
317       peuvent &ecirc;tre utilis&eacute;es :</p>
318
319 <dl>
320     <dt>txt</dt>
321         <dd>Un fichier texte contenant des paires cl&eacute;-valeur s&eacute;par&eacute;es
322         par des espaces, une paire par ligne (<a
323         href="../rewrite/rewritemap.html#txt">D&eacute;tails ...</a>).</dd>
324
325     <dt>rnd</dt>
326         <dd>S&eacute;lection al&eacute;atoire d'une entr&eacute;e depuis un fichier texte (<a
327         href="../rewrite/rewritemap.html#rnd">D&eacute;tails ...</a>).</dd>
328
329     <dt>dbm</dt>
330         <dd>Recherche une entr&eacute;e dans un fichier dbm contenant des
331         paires nom-valeur. Le condens&eacute; hash est &eacute;labor&eacute; &agrave; partir d'un
332         format de fichier texte via l'utilitaire <code><a
333         href="../programs/httxt2dbm.html">httxt2dbm</a></code> (<a
334         href="../rewrite/rewritemap.html#dbm">D&eacute;tails ...</a>).</dd>
335
336     <dt>int</dt>
337         <dd>Une des quatre fonctions internes disponibles que fournit
338         <code>RewriteMap</code>: toupper, tolower, escape ou unescape
339         (<a href="../rewrite/rewritemap.html#int">D&eacute;tails ...</a>).</dd>
340
341     <dt>prg</dt>
342         <dd>Appelle un programme externe ou un script pour effectuer la
343         r&eacute;&eacute;criture (<a href="../rewrite/rewritemap.html#int">D&eacute;tails
344         ...</a>).</dd>
345
346     <dt>dbd or fastdbd</dt>
347         <dd>Une commande SQL SELECT &agrave; ex&eacute;cuter pour rechercher la cible
348         de r&eacute;&eacute;criture (<a href="../rewrite/rewritemap.html#int">D&eacute;tails
349         ...</a>).</dd>
350     </dl>
351
352 <p>Vous trouverez plus de d&eacute;tails et de nombreux exemples dans le <a
353 href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
354
355 </usage>
356 </directivesynopsis>
357
358 <directivesynopsis>
359 <name>RewriteBase</name>
360 <description>D&eacute;finit l'URL de base pour les r&eacute;&eacute;critures au niveau
361 r&eacute;pertoire</description>
362 <syntax>RewriteBase <em>chemin URL</em></syntax>
363 <default>Pas de valeur par d&eacute;faut</default>
364 <contextlist><context>directory</context><context>.htaccess</context>
365 </contextlist>
366 <override>FileInfo</override>
367
368 <usage>
369       <p>La directive <directive>RewriteBase</directive> permet de
370       sp&eacute;cifier le pr&eacute;fixe d'URL &agrave; utiliser dans un contexte de
371       r&eacute;pertoire (htaccess) pour les directives
372       <directive>RewriteRule</directive> qui r&eacute;&eacute;crivent vers un chemin
373       relatif.</p>
374       <p>Cette directive est <em>obligatoire</em> si vous utilisez un
375       chemin relatif dans une substitution, et dans un contexte de
376       r&eacute;pertoire (htaccess), sauf si au moins une de ces conditions est
377       v&eacute;rifi&eacute;e :</p>
378       <ul>
379           <li>La requ&ecirc;te initiale, ainsi que la substitution, sont dans
380           la <directive module="core">DocumentRoot</directive> (c'est &agrave;
381           dire que pour y acc&eacute;der, il n'est pas n&eacute;cessaire d'utiliser
382           une directive telle qu'<directive
383           module="mod_alias">Alias</directive>).</li>
384           <li>Le chemin du syst&egrave;me de fichiers vers le r&eacute;pertoire
385           contenant la <directive>RewriteRule</directive>, suffix&eacute; par
386           la substitution relative est aussi valide en tant qu'URL sur
387           le serveur (ce qui est rare).</li>
388       </ul>
389
390 <p>Dans l'exemple ci-dessous, la directive
391 <directive>RewriteBase</directive> est n&eacute;cessaire afin d'&eacute;viter une
392 r&eacute;&eacute;criture en http://example.com/opt/myapp-1.2.3/welcome.html car la
393 ressource n'&eacute;tait pas relative &agrave; la racine des documents. Cette erreur
394 de configuration aurait conduit le serveur &agrave; rechercher un r&eacute;pertoire
395 "opt" &agrave; la racine des documents.</p>
396
397 <highlight language="config">
398 DocumentRoot /var/www/example.com
399 Alias /myapp /opt/myapp-1.2.3
400 &lt;Directory /opt/myapp-1.2.3&gt;
401  RewriteEngine On
402     RewriteBase /myapp/
403     RewriteRule ^index\.html$  welcome.html
404 &lt;/Directory&gt;
405 </highlight>
406 </usage>
407
408 </directivesynopsis>
409
410 <directivesynopsis>
411 <name>RewriteCond</name>
412 <description>D&eacute;finit une condition qui devra &ecirc;tre satisfaite pour que
413 la r&eacute;&eacute;criture soit effectu&eacute;e
414 </description>
415 <syntax> RewriteCond
416       <em>cha&icirc;ne de test</em> <em>expression de comparaison</em></syntax>
417 <contextlist><context>server config</context><context>virtual host</context>
418 <context>directory</context><context>.htaccess</context></contextlist>
419 <override>FileInfo</override>
420
421 <usage>
422       <p>La directive <directive>RewriteCond</directive> permet de d&eacute;finir une
423       condition d'ex&eacute;cution d'une r&egrave;gle. Une ou plusieurs conditions
424       <directive>RewriteCond</directive> peuvent pr&eacute;c&eacute;der une
425       directive <directive module="mod_rewrite"
426       >RewriteRule</directive>. La r&egrave;gle de r&eacute;&eacute;criture correspondante n'est
427       ainsi ex&eacute;cut&eacute;e que si ces conditions sont satisfaites,
428       <strong>et</strong> si l'URI correspond au mod&egrave;le sp&eacute;cifi&eacute; dans la
429       r&egrave;gle.</p>
430
431       <p><em>TestString</em> est une cha&icirc;ne qui peut contenir les
432       extensions suivantes en plus du texte simple :</p>
433
434       <ul>
435         <li>
436           <strong>r&eacute;f&eacute;rences arri&egrave;res de r&egrave;gle de r&eacute;&eacute;criture</strong> :
437           ce sont des r&eacute;f&eacute;rences arri&egrave;res de la forme
438           <strong><code>$N</code></strong> (0 &lt;= N &lt;= 9). $1 &agrave; $9
439           permettent d'acc&eacute;der aux parties regroup&eacute;es (entre
440           parenth&egrave;ses) du mod&egrave;le, issues de la <code>RewriteRule</code>
441           concern&eacute;e par le jeu de conditions <code>RewriteCond</code>
442           courant. $0 donne acc&egrave;s &agrave; l'ensemble de la cha&icirc;ne
443           correspondant au mod&egrave;le.</li>
444         <li>
445           <strong>R&eacute;f&eacute;rences arri&egrave;res de condition de r&eacute;&eacute;criture
446           </strong> : ce sont des r&eacute;f&eacute;rences arri&egrave;res de la forme
447           <strong><code>%N</code></strong> (0 &lt;= N &lt;= 9). %1 &agrave; %9
448           permettent d'acc&eacute;der aux parties regroup&eacute;es (entre
449           parenth&egrave;ses) du mod&egrave;le, issues de la <code>RewriteRule</code>
450           concern&eacute;e par le jeu de conditions <code>RewriteCond</code>
451           courant. %0 donne acc&egrave;s &agrave; l'ensemble de la cha&icirc;ne
452           correspondant au mod&egrave;le.</li>
453         <li>
454           <strong>extensions de table de r&eacute;&eacute;criture</strong> :
455           ce sont des extensions de la forme <strong><code
456           >${nomTable:cl&eacute;|d&eacute;faut}</code></strong>. Voir la <a
457           >href="#mapfunc">documentation sur RewriteMap</a>
458            pour plus de d&eacute;tails.
459         </li>
460         <li>
461           <strong>Variables du serveur</strong> :
462           ce sont des variables de la forme
463           <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
464             o&ugrave; <em>NOM_DE_VARIABLE</em> peut contenir une cha&icirc;ne issue
465             de la liste suivante :
466
467           <table>
468           <columnspec><column width=".3"/><column width=".3"/>
469            <column width=".3"/></columnspec>
470             <tr>
471               <th>En-t&ecirc;tes HTTP :</th> <th>connexion &amp; requ&ecirc;te:</th> <th></th>
472             </tr>
473
474             <tr>
475               <td>
476                  HTTP_USER_AGENT<br />
477                  HTTP_REFERER<br />
478                  HTTP_COOKIE<br />
479                  HTTP_FORWARDED<br />
480                  HTTP_HOST<br />
481                  HTTP_PROXY_CONNECTION<br />
482                  HTTP_ACCEPT<br />
483               </td>
484
485               <td>
486                  REMOTE_ADDR<br />
487                  REMOTE_HOST<br />
488                  REMOTE_PORT<br />
489                  REMOTE_USER<br />
490                  REMOTE_IDENT<br />
491                  REQUEST_METHOD<br />
492                  SCRIPT_FILENAME<br />
493                  PATH_INFO<br />
494                  QUERY_STRING<br />
495                  AUTH_TYPE<br />
496               </td>
497
498               <td></td>
499             </tr>
500
501             <tr>
502               <th>variables internes au serveur :</th> <th>date et heure :</th> <th>sp&eacute;ciaux :</th>
503             </tr>
504
505             <tr>
506               <td>
507                  DOCUMENT_ROOT<br />
508                  SERVER_ADMIN<br />
509                  SERVER_NAME<br />
510                  SERVER_ADDR<br />
511                  SERVER_PORT<br />
512                  SERVER_PROTOCOL<br />
513                  SERVER_SOFTWARE<br />
514               </td>
515
516               <td>
517                  TIME_YEAR<br />
518                  TIME_MON<br />
519                  TIME_DAY<br />
520                  TIME_HOUR<br />
521                  TIME_MIN<br />
522                  TIME_SEC<br />
523                  TIME_WDAY<br />
524                  TIME<br />
525               </td>
526
527               <td>
528                  API_VERSION<br />
529                  THE_REQUEST<br />
530                  REQUEST_URI<br />
531                  REQUEST_FILENAME<br />
532                  IS_SUBREQ<br />
533                  HTTPS<br />
534                  REQUEST_SCHEME<br />
535               </td>
536             </tr>
537           </table>
538
539                 <p>Ces variables correspondent toutes aux en-t&ecirc;tes MIME
540                 HTTP de m&ecirc;mes noms, au variables C du serveur HTTP Apache, ou
541                 aux champs <code>struct tm</code> du syst&egrave;me Unix. La
542                 plupart d'entre elles sont document&eacute;es ailleurs dans le
543                 manuel ou dans la sp&eacute;cification CGI.</p>
544
545                 <p>SERVER_NAME et SERVER_PORT d&eacute;pendent respectivement
546                 des valeurs des directives <directive
547                 module="core">UseCanonicalName</directive> et <directive
548                 module="core">UseCanonicalPhysicalPort</directive>.</p>
549
550                 <p>Parmi les variables
551                 sp&eacute;cifiques &agrave; mod_rewrite, ou trouve les suivantes :</p>
552         <note>
553                 <dl>
554                   <dt><code>IS_SUBREQ</code></dt>
555
556                   <dd>Contient le texte "true" si la requ&ecirc;te en cours
557                   de traitement est une sous-requ&ecirc;te, "false" dans le
558                   cas contraire. Une sous-requ&ecirc;te est g&eacute;n&eacute;r&eacute;e quand un
559                   module a besoin de se r&eacute;f&eacute;rer &agrave; des fichiers ou URIs
560                   addidionnels pour pouvoir mener &agrave; bien sa t&acirc;che.</dd>
561
562                   <dt><code>API_VERSION</code></dt>
563
564                   <dd>C'est la version de l'API des modules Apache httpd
565                   (l'interface interne entre le serveur et les modules)
566                   pour la construction courante de httpd, telle qu'elle
567                   est d&eacute;finie dans include/ap_mmn.h. La version de l'API
568                   des modules correspond &agrave; la version du serveur Apache
569                   httpd
570                   utilis&eacute; (par exemple, pour la version 1.3.14 d'Apache
571                   httpd,
572                   il s'agit de la version 19990320:10), mais int&eacute;resse
573                   principalement les auteurs de modules.</dd>
574
575                   <dt><code>THE_REQUEST</code></dt>
576
577                   <dd>La ligne de requ&ecirc;te HTTP compl&egrave;te envoy&eacute;e par le
578                   navigateur au serveur (par exemple, "<code>GET
579                   /index.html HTTP/1.1</code>"), &agrave; l'exclusion de tout
580                   en-t&ecirc;te ajout&eacute; par le navigateur. Cette
581                   valeur n'a pas &eacute;t&eacute; d&eacute;s&eacute;chapp&eacute;e (d&eacute;cod&eacute;e), &agrave; la
582                   diff&eacute;rence de la plupart des variables suivantes.</dd>
583
584                   <dt><code>REQUEST_URI</code></dt>
585
586                   <dd>La partie chemin de l'URI de la requ&ecirc;te, comme
587                   "/index.html". En particulier, ceci exclut la cha&icirc;ne
588                   de param&egrave;tres qui est quant &agrave; elle disponible via sa
589                   propre variable <code>QUERY_STRING</code>.</dd>
590
591                   <dt><code>REQUEST_FILENAME</code></dt>
592
593                   <dd>Le chemin complet local au syst&egrave;me de fichiers
594                   du fichier ou du script correspondant
595                   &agrave; la requ&ecirc;te, s'il a d&eacute;j&agrave; &eacute;t&eacute; d&eacute;termin&eacute; par le serveur
596                   au moment o&ugrave; on y fait r&eacute;f&eacute;rence. Dans le cas
597                   contraire, et en particulier dans le cas d'un serveur
598                   virtuel, <code>REQUEST_FILENAME</code> contient la
599                   valeur de <code>REQUEST_URI</code>.</dd>
600
601                   <dt><code>HTTPS</code></dt>
602
603                   <dd>Contient le texte "on" si la connexion
604                   utilise SSL/TLS, "off" dans le cas contraire
605                   (Cette variable peut &ecirc;tre utilis&eacute;e sans probl&egrave;me, que
606                   <module>mod_ssl</module> soit charg&eacute; ou non.</dd>
607
608                   <dt><code>REQUEST_SCHEME</code></dt>
609
610                   <dd>Contient le protocole de la requ&ecirc;te (en g&eacute;n&eacute;ral
611                   "http" ou "https"). La valeur peut &ecirc;tre modifi&eacute;e par
612                   la directive <directive
613                   module="core">ServerName</directive>.</dd>
614
615                 </dl>
616 </note>
617         </li>
618       </ul>
619
620       <p>Si la <em>cha&icirc;ne de test</em> contient la valeur sp&eacute;ciale
621       <code>expr</code>, <em>expression de comparaison</em> sera trait&eacute;
622       en tant qu'expression rationnelle de type <a
623       href="../expr.html">ap_expr</a>. Si des en-t&ecirc;tes HTTP sont
624       r&eacute;f&eacute;renc&eacute;s dans l'expression rationnelle, et si le drapeau
625       <code>novary</code> n'est pas activ&eacute;, ils seront ajout&eacute;s &agrave;
626       l'en-t&ecirc;te Vary.</p>
627
628       <p>Autres points &agrave; conna&icirc;tre ::</p>
629       <ol>
630         <li>
631         <p>Les variables <code>SCRIPT_FILENAME</code> et
632         <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
633         du champ <code>filename</code> de la
634         structure interne <code>request_rec</code>du serveur HTTP Apache.
635         Le premier nom correspond au nom de variable bien connu CGI,
636         alors que le second est l'&eacute;quivalent de REQUEST_URI (qui
637         contient la valeur du champ <code>uri</code> de
638         <code>request_rec</code>).</p>
639         <p>Si une substitution intervient et si la r&eacute;&eacute;criture se
640         poursuit, la valeur des deux variables sera mise &agrave; jour en
641         cons&eacute;quence.</p>
642         <p>Dans le contexte du serveur principal (c'est &agrave; dire avant que
643         la requ&ecirc;te ne soit mise en correspondance avec le syst&egrave;me de
644         fichiers), SCRIPT_FILENAME et REQUEST_FILENAME  ne peuvent pas
645         contenir le chemin entier dans le syst&egrave;me de fichiers local car
646         ce chemin b'est pas connu &agrave; ce stade du traitement. Dans ce cas,
647         les deux variables contiendront la valeur de REQUEST_URI. Pour
648         obtenir le chemin complet de la requ&ecirc;te dans le syst&egrave;me de
649         fichiers local dans le contexte du serveur principal, utilisez une
650         r&eacute;f&eacute;rence avant &agrave; base d'URL
651         <code>%{LA-U:REQUEST_FILENAME}</code> pour d&eacute;terminer la valeur
652         finale de REQUEST_FILENAME.</p></li>
653
654
655         <li>
656         <code>%{ENV:<em>variable</em>}</code>, o&ugrave; <em>variable</em> peut
657         correspondre &agrave; une variable d'environnement quelconque.</li>
658         <li>
659         <code>%{ENV:variable}</code> est aussi disponible, o&ugrave;
660         <em>variable</em> peut correspondre &agrave; toute variable
661         d'environnement. Peut &ecirc;tre consult&eacute; via des structures internes
662         d'Apache httpd et (si on ne les trouve pas ici) via la fonction
663         <code>getenv()</code> &agrave; partir du processus du serveur Apache
664         httpd.</li>
665
666         <li>Que <module>mod_ssl</module> soit charg&eacute; ou non, on peut
667         utiliser <code>%{SSL:variable}</code>, o&ugrave; <em>variable</em>
668         peut &ecirc;tre remplac&eacute; par le nom d'une
669         <a href="mod_ssl.html#envvars">variable
670         d'environnement SSL</a> . Si <module>mod_ssl</module> n'est pas
671         charg&eacute;, cette variable contiendra toujours une cha&icirc;ne vide.
672         Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
673         contenir la valeur <code>128</code>.</li>
674
675         <li>
676         On peut utiliser <code>%{HTTP:en-t&ecirc;te}</code>, o&ugrave;
677         <em>en-t&ecirc;te</em> peut correspondre &agrave; tout nom d'en-t&ecirc;te MIME
678         HTTP, pour extraire la valeur d'un en-t&ecirc;te envoy&eacute; dans la
679         requ&ecirc;te HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
680         contiendra la valeur de l'en-t&ecirc;te HTTP
681         "<code>Proxy-Connection:</code>".
682         Si on utilise un en-t&ecirc;te HTTP
683         dans une condition, et si cette condition est &eacute;valu&eacute;e &agrave;
684         <code>vrai</code> pour la requ&ecirc;te, cet en-t&ecirc;te sera ajout&eacute; &agrave; l'en-t&ecirc;te Vary de
685         la r&eacute;ponse. Il ne le sera pas si la condition est &eacute;valu&eacute;e &agrave;
686         <code>faux</code>. L'ajout de l'en-t&ecirc;te HTTP &agrave; l'en-t&ecirc;te Vary
687         est n&eacute;cessaire &agrave; une mise en cache appropri&eacute;e.
688         <p>Il faut garder &agrave; l'esprit que les conditions suivent une
689         logique de cout-circuit si le drapeau
690         '<strong><code>ornext|OR</code></strong>' est utilis&eacute;, et que de
691         ce fait, certaines d'entre elles ne seront pas &eacute;valu&eacute;es.</p>
692         </li>
693
694         <li>A des fins de r&eacute;f&eacute;rence avant, on peut utiliser,
695         <code>%{LA-U:variable}</code>, qui
696         permet d'effectuer une sous-requ&ecirc;te interne &agrave; base d'URL, afin
697         de d&eacute;terminer la valeur finale de <em>variable</em>. Ceci permet
698         d'acc&eacute;der &agrave; la valeur d'une variable pour la r&eacute;&eacute;criture inconnue
699         &agrave; ce stade du traitement, mais qui sera d&eacute;finie au
700         cours d'une phase ult&eacute;rieure.
701         <p>Par exemple, pour effectuer une r&eacute;&eacute;criture d&eacute;pendant de la
702         variable <code>REMOTE_USER</code> dans le contexte du serveur
703         principal (fichier <code>httpd.conf</code>), vous devez utiliser
704         <code>%{LA-U:REMOTE_USER}</code> - cette variable est d&eacute;finie
705         par la phase d'autorisation qui intervient <em>apr&egrave;s</em> la
706         phase de traduction d'URL (pendant laquelle mod_rewrite op&egrave;re).</p>
707         <p>Par contre, comme mod_rewrite impl&eacute;mente son contexte de
708         r&eacute;pertoire (fichier <code>.htaccess</code>) via la phase Fixup
709         de l'API, et comme la phase d'autorisation intervient
710         <em>avant</em> cette derni&egrave;re, vous pouvez vous contenter
711         d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
712
713         <li>
714         <code>%{LA-F:variable}</code> peut &ecirc;tre utilis&eacute;e pour effectuer
715         une sous-requ&ecirc;te interne (bas&eacute;e sur le nom de fichier), afin de
716         d&eacute;terminer la valeur finale de <em>variable</em>. La plupart du
717         temps, elle est identique &agrave; LA-U (voir ci-dessus).</li>
718       </ol>
719
720
721       <p><em>expression de comparaison</em> est une expression
722       rationnelle qui est appliqu&eacute;e &agrave; l'instance actuelle de
723       <em>cha&icirc;ne de test</em>. <em>cha&icirc;ne de test</em> est d'abord
724       &eacute;valu&eacute;e, puis compar&eacute;e &agrave;
725       l'<em>expression de comparaison</em>.</p>
726
727       <p><em>expression de comparaison</em> est en g&eacute;n&eacute;ral une
728       <em>expression rationnelle compatible perl</em>, mais vous
729       disposez des syntaxes suppl&eacute;mentaires suivantes pour effectuer
730       d'autres tests utiles sur <em>cha&icirc;ne de test</em> :
731       </p>
732
733       <ol>
734         <li>Vous pouvez pr&eacute;fixer l'expression avec un caract&egrave;re
735         '<code>!</code>' (point d'exclamation) pour indiquer une
736         expression de <strong>non</strong>-correspondance.</li>
737
738         <li>Vous pouvez effectuer des comparaisons lexicographiques de
739         cha&icirc;nes   :
740
741           <ul>
742             <li>'<strong>&lt;expression</strong>' (inf&eacute;rieur au sens
743             lexicographique)<br />
744             Traite l'<em>expression</em> comme une cha&icirc;ne de
745             caract&egrave;res et la compare lexicographiquement &agrave;
746             <em>cha&icirc;ne de test</em>. La condition est satisfaite si
747             <em>cha&icirc;ne de test</em> est inf&eacute;rieure au sens
748             lexicographique &agrave; l'<em>expression</em>.</li>
749
750             <li>'<strong>&gt;expression</strong>' (sup&eacute;rieur au sens
751             lexicographique)<br />
752             Traite l'<em>expression</em> comme une cha&icirc;ne de
753             caract&egrave;res et la compare lexicographiquement &agrave;
754             <em>cha&icirc;ne de test</em>. La condition est satisfaite si
755             <em>cha&icirc;ne de test</em> est sup&eacute;rieure au sens
756             lexicographique &agrave; l'<em>expression</em>.</li>
757
758             <li>'<strong>=expression</strong>' (&eacute;gal au sens
759             lexicographique)<br />
760             Traite l'<em>expression</em> comme une cha&icirc;ne de
761             caract&egrave;res et la compare lexicographiquement &agrave;
762             <em>cha&icirc;ne de test</em>. La condition est satisfaite si
763             <em>cha&icirc;ne de test</em> est &eacute;gale au sens
764             lexicographique &agrave; l'<em>expression</em> (les deux cha&icirc;nes
765             sont exactement identiques, caract&egrave;re pour caract&egrave;re). Si
766             <em>expression</em> est <code>""</code> (deux guillemets),
767             <em>cha&icirc;ne de test</em> est compar&eacute;e &agrave; la cha&icirc;ne vide.</li>
768
769             <li>'<strong>&lt;=expression de comparaison</strong>' (inf&eacute;rieur ou &eacute;gal &agrave;
770             au sens lexicographique)<br />
771             Consid&egrave;re l'<em>expression de comparaison</em> comme une
772             cha&icirc;ne de caract&egrave;res et la compare au sens lexicographique &agrave;
773             la <em>cha&icirc;ne de test</em>. Vrai si <em>cha&icirc;ne de test</em>
774             pr&eacute;c&egrave;de lexicographiquement <em>expression de comparaison</em>, ou est
775             &eacute;gale &agrave; <em>expression de comparaison</em> (les deux cha&icirc;nes
776             sont identiques, caract&egrave;re pour caract&egrave;re).</li>
777
778             <li>'<strong>&gt;=expression de comparaison</strong>'
779             (sup&eacute;rieur ou &eacute;gal &agrave; au sens lexicographique)<br />
780             Consid&egrave;re l'<em>expression de comparaison</em> comme une
781             cha&icirc;ne de caract&egrave;res et la compare au sens lexicographique &agrave;
782             la <em>cha&icirc;ne de test</em>. Vrai si <em>cha&icirc;ne de test</em>
783             suit lexicographiquement <em>expression de comparaison</em>, ou est
784             &eacute;gale &agrave; <em>expression de comparaison</em> (les deux cha&icirc;nes
785             sont identiques, caract&egrave;re pour caract&egrave;re).</li>
786         </ul></li>
787
788         <li>
789           Vous pouvez effectuer des comparaisons d'entiers :
790           <ul>
791
792             <li>'<strong>-eq</strong>' (est num&eacute;riquement &eacute;gal &agrave;)<br />
793             La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
794             et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
795             comparaison</em>. Vrai si les deux expressions sont
796             num&eacute;riquement &eacute;gales.</li>
797
798             <li>'<strong>-ge</strong>' (est num&eacute;riquement sup&eacute;rieur ou
799             &eacute;gal &agrave;)<br />
800             La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
801             et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
802             comparaison</em>. Vrai si <em>cha&icirc;ne de test</em> est
803             num&eacute;riquement
804             sup&eacute;rieure ou &eacute;gale &agrave; <em>expression de comparaison</em>.</li>
805
806              <li>'<strong>-gt</strong>' (est num&eacute;riquement sup&eacute;rieur &agrave;)<br />
807             La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
808             et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
809             comparaison</em>. Vrai si <em>cha&icirc;ne de test</em> est
810             num&eacute;riquement
811             sup&eacute;rieure &agrave; <em>expression de comparaison</em>.</li>
812
813             <li>'<strong>-le</strong>' (est num&eacute;riquement inf&eacute;rieur ou
814             &eacute;gal &agrave;)<br />
815             La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
816             et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
817             comparaison</em>. Vrai si <em>cha&icirc;ne de test</em> est
818             num&eacute;riquement
819             inf&eacute;rieure ou &eacute;gale &agrave; <em>expression de comparaison</em>.
820             Attention &agrave; la confusion avec le drapeau <strong>-l</strong>
821             en utilisant la variante the <strong>-L</strong> ou
822             <strong>-h</strong>.</li>
823
824              <li>'<strong>-lt</strong>' (est num&eacute;riquement inf&eacute;rieur &agrave;)<br />
825             La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
826             et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
827             comparaison</em>. Vrai si <em>cha&icirc;ne de test</em> est
828             num&eacute;riquement
829             inf&eacute;rieure &agrave; <em>expression de comparaison</em>.
830             Attention &agrave; la confusion avec le drapeau <strong>-l</strong>
831             en utilisant la variante the <strong>-L</strong> ou
832             <strong>-h</strong>.</li>
833
834            </ul>
835         </li>
836
837         <li>Vous pouvez effectuer diff&eacute;rents tests sur les attributs de
838         fichier :
839           <ul>
840
841             <li>'<strong>-d</strong>' (est un r&eacute;pertoire -
842             <strong>d</strong>irectory)<br />
843             Traite <em>cha&icirc;ne de test</em> comme un chemin et v&eacute;rifie
844             s'il existe ou pas, et s'il s'agit d'un r&eacute;pertoire.</li>
845
846             <li>'<strong>-f</strong>' (est un
847             <strong>f</strong>ichier r&eacute;gulier)<br />
848             Traite <em>cha&icirc;ne de test</em> comme un chemin et v&eacute;rifie
849             s'il existe ou pas, et s'il s'agit d'un fichier r&eacute;gulier.</li>
850
851             <li>'<strong>-F</strong>' (test de l'existence d'un fichier
852             via une sous-requ&ecirc;te)<br />
853             V&eacute;rifie si <em>cha&icirc;ne de test</em> est un fichier valide,
854             accessible &agrave; travers tous les contr&ocirc;les d'acc&egrave;s du serveur
855             actuellement configur&eacute;s pour ce chemin. C'est une
856             sous-requ&ecirc;te interne qui effectue cette v&eacute;rification - &agrave;
857             utiliser avec pr&eacute;cautions car les performances du serveur
858             peuvent s'en trouver affect&eacute;es !</li>
859
860             <li>'<strong>-H</strong>' (est un lien symbolique, selon la
861             convention bash)<br />
862             Voir <strong>-l</strong>.</li>
863
864             <li>'<strong>-l</strong>' (est un lien symbolique)<br />
865             Consid&egrave;re la <em>cha&icirc;ne de test</em> comme un chemin et
866             v&eacute;rifie son existence et si elle est un lien symbolique. On
867             peut aussi utiliser la convention bash <strong>-L</strong>
868             ou <strong>-h</strong> lorsqu'il y a risque de confusion
869             avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</li>
870
871             <li>'<strong>-L</strong>' (est un lien symbolique, selon la
872             convention bash)<br />
873             Voir <strong>-l</strong>.</li>
874
875             <li>'<strong>-s</strong>' (est un fichier r&eacute;gulier d'une
876             certaine taille)<br />
877             Consid&egrave;re la <em>cha&icirc;ne de test</em> comme un chemin et
878             v&eacute;rifie son existence et si elle est un fichier r&eacute;gulier
879             d'une taille sup&eacute;rieure &agrave; z&eacute;ro.</li>
880
881             <li>'<strong>-U</strong>' (test de l'existence d'une
882             <strong>U</strong>RL via une sous-requ&ecirc;te)<br />
883             V&eacute;rifie si <em>cha&icirc;ne de test</em> est une URL valide,
884             accessible &agrave; travers tous les contr&ocirc;les d'acc&egrave;s du serveur
885             actuellement configur&eacute;s pour ce chemin. C'est une
886             sous-requ&ecirc;te interne qui effectue cette v&eacute;rification - &agrave;
887             utiliser avec pr&eacute;cautions car les performances du serveur
888             peuvent s'en trouver affect&eacute;es !</li>
889
890           <li>'<strong>-x</strong>' (a l'attribut d'ex&eacute;cution positionn&eacute;)<br />
891             Consid&egrave;re la <em>cha&icirc;ne de test</em> comme un chemin et
892             v&eacute;rifie son existence et si elle a son attribut d'ex&eacute;cution
893             positionn&eacute;. Ce positionnement est d&eacute;termin&eacute; en fonction de
894             l'OS sous-jacent.</li>
895
896             </ul>
897
898 <note><title>Note :</title>
899               Tous ces tests peuvent aussi &ecirc;tre pr&eacute;fix&eacute;s par un point
900               d'exclamation ('!') pour inverser leur signification.
901 </note>
902         </li>
903
904         <li>
905            <p>Si la <em>cha&icirc;ne de test</em> contient la valeur sp&eacute;ciale
906            <code>expr</code>, la <em>cha&icirc;ne de comparaison</em> sera
907            trait&eacute;e en tant qu'expression rationnelle de type <a
908            href="../expr.html">ap_expr</a>.</p>
909
910            <p>
911             Dans l'exemple ci-dessous, on utilise <code>-strmatch</code>
912             pour comparer le <code>REFERER</code> avec le nom d'h&ocirc;te du
913             site afin de bloquer le hotlinking (r&eacute;f&eacute;rencement direct)
914             non d&eacute;sir&eacute;.
915            </p>
916
917            <highlight language="config">
918            RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"<br />
919            RewriteRule ^/images - [F]
920            </highlight>
921         </li>
922
923         <li>Vous pouvez aussi d&eacute;finir certains drapeaux pour
924         l'<em>expression de comparaison</em> en ajoutant ces
925         <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
926         comme troisi&egrave;me argument de la directive
927         <code>RewriteCond</code>, o&ugrave; <em>drapeaux</em> est un
928         sous-ensemble s&eacute;par&eacute; par des virgules des drapeaux suivants :
929
930       <ul>
931         <li>'<strong><code>nocase|NC</code></strong>'
932         (<strong>n</strong>o <strong>c</strong>ase)<br />
933         Rend le test insensible &agrave; la casse - il n'est pas fait de
934         distinction entre majuscules et minuscules, &agrave; la fois dans le
935         d&eacute;veloppement de <em>cha&icirc;ne de test</em> et dans
936         <em>expression de comparaison</em>. Ce drapeau n'est pris en
937         compte que lors d'une comparaison entre <em>cha&icirc;ne de test</em>
938         et <em>expression de comparaison</em>. Il ne l'est pas pour les
939         v&eacute;rification par sous-requ&ecirc;tes ou sur le syst&egrave;me de
940         fichiers.</li>
941
942         <li>
943           '<strong><code>ornext|OR</code></strong>'
944           (<strong>ou</strong> condition suivante)<br />
945           Permet de cha&icirc;ner les conditions de r&egrave;gles avec un OU au
946           lieu du AND implicite. Exemple typique :
947
948 <highlight language="config">
949 RewriteCond %{REMOTE_HOST}  ^host1  [OR]
950 RewriteCond %{REMOTE_HOST}  ^host2  [OR]
951 RewriteCond %{REMOTE_HOST}  ^host3
952 RewriteRule ...r&egrave;gles concernant tous ces h&ocirc;tes...
953 </highlight>
954
955           Sans ce drapeau, les paires
956           condition/r&egrave;gle devraient &ecirc;tre &eacute;crites trois fois.
957         </li>
958
959         <li>'<strong><code>novary|NV</code></strong>'
960         (<strong>n</strong>o <strong>v</strong>ary)<br />
961         Si la condition contient un en-t&ecirc;te HTTP, ce drapeau emp&ecirc;che
962         ce dernier d'&ecirc;tre ajout&eacute; &agrave; l'en-t&ecirc;te Vary de la r&eacute;ponse. <br />
963         L'utilisation de ce drapeau peut provoquer une mise en cache
964         incorrecte de la r&eacute;ponse, si la repr&eacute;sentation de cette r&eacute;ponse
965         varie avec la valeur de l'en-t&ecirc;te consid&eacute;r&eacute;. Ce drapeau ne
966         devrait donc &ecirc;tre utilis&eacute; que si l'on ma&icirc;trise parfaitement le
967         fonctionnement de l'en-t&ecirc;te Vary.
968         </li>
969       </ul>
970       </li>
971      </ol>
972
973       <p><strong>Exemple :</strong></p>
974
975        <p>Pour r&eacute;&eacute;crire la page d'accueil d'un site en fonction de
976        l'en-t&ecirc;te ``<code>User-Agent:</code>'' de la requ&ecirc;te, vous
977        pouvez utiliser ce qui suit : </p>
978
979 <highlight language="config">
980 RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla
981 RewriteRule  ^/$                 /homepage.max.html  [L]
982
983 RewriteCond  %{HTTP_USER_AGENT}  ^Lynx
984 RewriteRule  ^/$                 /homepage.min.html  [L]
985
986 RewriteRule  ^/$                 /homepage.std.html  [L]
987 </highlight>
988
989         <p>Explications : si vous utilisez un navigateur
990         (Netscape Navigator, Mozilla etc) qui s'identifie comme
991         'Mozilla', vous acc&egrave;derez &agrave; la page d'accueil max (qui
992         peut contenir des frames, ou d'autres ressources
993         particuli&egrave;res).
994         Si vous utilisez le navigateur Lynx (qui est un navigateur
995         en mode texte), vous acc&egrave;derez &agrave; une page d'accueil min
996         (qui peut &ecirc;tre une version con&ccedil;ue pour une navigation simple
997         bas&eacute;e sur le texte).
998         Si aucune de ces conditions n'est satisfaite (vous utilisez tout
999         autre navigateur, ou votre navigateur s'identifie de mani&egrave;re non
1000         standard), vous acc&egrave;derez &agrave; la page d'accueil std
1001         (standard).</p>
1002
1003 </usage>
1004
1005 </directivesynopsis>
1006
1007 <directivesynopsis>
1008 <name>RewriteRule</name>
1009 <description>D&eacute;finit les r&egrave;gles pour le moteur de r&eacute;&eacute;criture</description>
1010 <syntax>RewriteRule
1011       <em>Mod&egrave;le</em> <em>Substitution</em> [<em>drapeaux</em>]</syntax>
1012 <contextlist><context>server config</context><context>virtual host</context>
1013 <context>directory</context><context>.htaccess</context></contextlist>
1014 <override>FileInfo</override>
1015
1016 <usage>
1017       <p>La directive <directive>RewriteRule</directive> est le
1018       v&eacute;ritable cheval de trait de la r&eacute;&eacute;criture. La directive peut
1019       appara&icirc;tre plusieurs fois, chaque instance d&eacute;finissant une
1020       r&egrave;gle de r&eacute;&eacute;criture particuli&egrave;re. L'ordre dans lequel ces r&egrave;gles
1021       sont d&eacute;finies est important - il s'agit de l'ordre dans lequel
1022       les r&egrave;gles seront appliqu&eacute;es au cours du processus de
1023       r&eacute;&eacute;criture.</p>
1024
1025       <p><a id="patterns" name="patterns"><em>Mod&egrave;le</em></a> est une
1026       <a id="regexp" name="regexp">expression rationnelle</a>
1027       compatible perl. Dans la premi&egrave;re r&egrave;gle de r&eacute;&eacute;criture,
1028       l'expression est compar&eacute;e au (%-decoded)
1029       <a href="./directive-dict.html#Syntax">chemin de l'URL</a> (ou au
1030       <a href="./directive-dict.html#Syntax">chemin fichier</a>, en
1031       fonction du contexte) de la
1032       requ&ecirc;te. Les expressions suivantes sont compar&eacute;es &agrave; la sortie de
1033       la derni&egrave;re r&egrave;gle de r&eacute;&eacute;criture qui
1034       correspondait.</p>
1035
1036 <note><title><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est compar&eacute; ?</a></title>
1037
1038       <p>Dans un contexte de serveur virtuel <directive
1039       module="core">VirtualHost</directive>, le <em>mod&egrave;le</em> est tout
1040       d'abord compar&eacute; &agrave; la portion de l'URL situ&eacute;e entre le nom d'h&ocirc;te
1041       &eacute;ventuellement accompagn&eacute; du port, et la cha&icirc;ne de param&egrave;tres (par
1042       exemple "/app1/index.html").</p>
1043
1044       <p>Dans les contextes de r&eacute;pertoire <directive
1045       module="core">Directory</directive> et htaccess, le
1046       <em>mod&egrave;le</em> est tout d'abord compar&eacute; au chemin du <em>syst&egrave;me
1047       de fichiers</em>, apr&egrave;s suppression du pr&eacute;fixe ou chemin de base
1048       ayant conduit le serveur vers la r&egrave;gle <directive>RewriteRule</directive> (par
1049       exemple "app1/index.html" ou
1050       "index.html" selon l'endroit o&ugrave; les directives sont d&eacute;finies).</p>
1051
1052       <p>Si vous souhaitez faire une comparaison sur le nom
1053       d'h&ocirc;te, le port, ou la cha&icirc;ne de requ&ecirc;te, utilisez une
1054       directive <directive module="mod_rewrite">RewriteCond</directive>
1055       comportant respectivement les variables
1056       <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
1057       <code>%{QUERY_STRING}</code>.</p>
1058 </note>
1059
1060 <note><title>R&eacute;&eacute;critures dans un contexte de r&eacute;pertoire</title>
1061 <ul>
1062 <li>L'utilisation du moteur de r&eacute;&eacute;criture dans les
1063 fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections
1064 <directive
1065 type="section" module="core">Directory</directive> est un peu plus
1066 complexe.</li>
1067
1068 <li>Pour activer le moteur de r&eacute;&eacute;criture dans ces contextes, vous devez
1069 d&eacute;finir "<code>RewriteEngine On</code>" <strong>et</strong>
1070 "<code>Options FollowSymLinks</code>". Si l'administrateur a d&eacute;sactiv&eacute;
1071 la possibilit&eacute; de modifier l'option <code>FollowSymLinks</code> au
1072 niveau du r&eacute;pertoire d'un utilisateur, vous ne pouvez pas utiliser le
1073 moteur de r&eacute;&eacute;criture. Cette restriction a &eacute;t&eacute; instaur&eacute;e &agrave; des fins de
1074 s&eacute;curit&eacute;.</li>
1075
1076 <li>Lorsqu'on utilise le moteur de r&eacute;&eacute;criture dans un fichier
1077 <code>.htaccess</code>, le chemin de base du r&eacute;pertoire courant (qui est
1078 toujours le m&ecirc;me pour ce m&ecirc;me r&eacute;pertoire) est automatiquement
1079 <em>supprim&eacute;</em> au cours de la comparaison avec le mod&egrave;le de la r&egrave;gle
1080 de r&eacute;&eacute;criture, et automatiquement <em>ajout&eacute;</em> lorsqu'une
1081 substitution relative (ne d&eacute;butant pas par un slash ou un nom de
1082 protocole) arrive &agrave; la fin d'un jeu de r&egrave;gles. Voir la directive
1083 <directive module="mod_rewrite">RewriteBase</directive> pour plus de
1084 d&eacute;tails &agrave; propos de l'ajout du pr&eacute;fixe apr&egrave;s les substitutions
1085 relatives.</li>
1086
1087 <li>Si vous souhaitez effectuer une comparaison en prenant en compte
1088 l'int&eacute;gralit&eacute; du
1089 chemin de l'URL dans un contexte de r&eacute;pertoire (htaccess), vous devez
1090 utiliser la variable <code>%{REQUEST_URI}</code> dans la directive
1091 <directive>RewriteCond</directive>.</li>
1092
1093 <li>Le prefixe supprim&eacute; se termine toujours par un slash, ce qui
1094 signifie que la comparaison s'effectue avec une cha&icirc;ne qui ne comporte
1095 <em>jamais</em> de slash de d&eacute;but. Ainsi, un <em>mod&egrave;le</em> contenant
1096 <code>^/</code> ne correspondra jamais dans un contexte de r&eacute;pertoire.</li>
1097
1098 <li>Bien que les r&egrave;gles de r&eacute;&eacute;criture soient permises du point de vue de
1099 la syntaxe dans les sections <directive type="section"
1100 module="core">Location</directive> et <directive type="section"
1101 module="core">Files</directive>, elles n'y sont pas prises en compte, et
1102 n'y sont &agrave; priori d'aucune utilit&eacute;.</li>
1103 </ul>
1104 </note>
1105
1106         <p>Pour quelques conseils &agrave; propos des <glossary
1107         ref="regex">expressions rationnelles</glossary>, voir le
1108         document <a
1109         href="../rewrite/intro.html#regex">Introduction &agrave;
1110         mod_rewrite</a>.</p>
1111
1112       <p>Dans mod_rewrite, on peut aussi utiliser le caract&egrave;re NON
1113       ('<code>!</code>') comme pr&eacute;fixe de mod&egrave;le. Ceci vous permet
1114       d'inverser la signification d'un mod&egrave;le, soit pour dire
1115       ``<em>si l'URL consid&eacute;r&eacute;e ne correspond <strong>PAS</strong> &agrave;
1116       ce mod&egrave;le</em>''. Le caract&egrave;re NON peut donc &ecirc;tre utilis&eacute; &agrave;
1117       titre exceptionnel, lorsqu'il est plus simple d'effectuer une
1118       comparaison avec le mod&egrave;le invers&eacute;, ou dans la derni&egrave;re r&egrave;gle
1119       par d&eacute;faut.</p>
1120
1121 <note><title>Note</title>
1122 Si vous utilisez le caract&egrave;re NON pour inverser la signification d'un
1123 mod&egrave;le, vous ne pouvez pas inclure de parties g&eacute;n&eacute;riques group&eacute;es dans
1124 le mod&egrave;le. Ceci est d&ucirc; au fait que, lorsque le mod&egrave;le ne correspond
1125 pas (autrement dit, sa n&eacute;gation correspond), les groupes sont vides.
1126 Ainsi, si vous utilisez des mod&egrave;les invers&eacute;s, vous ne pouvez
1127 pas vous r&eacute;f&eacute;rer aux groupes par <code>$N</code> dans la cha&icirc;ne de
1128 substitution !
1129 </note>
1130
1131       <p>Dans une r&egrave;gle de r&eacute;&eacute;criture,
1132       <a id="rhs" name="rhs"><em>Substitution</em></a> est la cha&icirc;ne
1133       de caract&egrave;res qui remplace le chemin de l'URL original qui
1134       correspondait au <em>Mod&egrave;le</em>. <em>Substitution</em> peut
1135       &ecirc;tre :</p>
1136
1137       <dl>
1138
1139         <dt>un chemin du syst&egrave;me de fichiers</dt>
1140
1141         <dd>Il indique alors la localisation dans le syst&egrave;me de
1142         fichiers de la ressource qui doit &ecirc;tre envoy&eacute;e au
1143         client. Les substitutions ne sont trait&eacute;es en tant que chemins du
1144         syst&egrave;me de fichiers que si la r&egrave;gle est configur&eacute;e dans un
1145         contexte de serveur (serveur virtuel), et si le premier
1146         composant du chemin dans la substitution existe dans le syst&egrave;me
1147         de fichiers.</dd>
1148
1149         <dt>chemin d'URL</dt>
1150
1151         <dd>Un chemin relatif &agrave; la valeur de <directive
1152         module="core">DocumentRoot</directive> vers la ressource qui
1153         doit &ecirc;tre servie. Notez que <module>mod_rewrite</module>
1154         essaie de deviner si vous avez sp&eacute;cifi&eacute; un chemin du syst&egrave;me
1155         de fichiers ou un chemin d'URL en v&eacute;rifiant si la premi&egrave;re
1156         partie du chemin existe &agrave; la racine du syst&egrave;me de fichiers.
1157         Par exemple, si vous avez sp&eacute;cifi&eacute; comme cha&icirc;ne de
1158         <em>Substitution</em> <code>/www/file.html</code>, cette
1159         derni&egrave;re sera trait&eacute;e comme un chemin d'URL <em>&agrave; moins</em>
1160         qu'un r&eacute;pertoire nomm&eacute; <code>www</code> n'existe &agrave; la racine
1161         de votre syst&egrave;me de fichiers (ou dans le cas d'une
1162         r&eacute;&eacute;criture au sein d'un fichier <code>.htaccess</code>,
1163         relativement &agrave; la racine des documents), auquel cas la cha&icirc;ne de
1164         substitution sera trait&eacute;e comme un chemin du syst&egrave;me de
1165         fichiers. Si vous d&eacute;sirez que d'autres directives de
1166         correspondance d'URL (comme la directive <directive
1167         module="mod_alias">Alias</directive>) soient appliqu&eacute;es au
1168         chemin d'URL r&eacute;sultant, utilisez le drapeau <code>[PT]</code>
1169         comme d&eacute;crit ci-dessous.</dd>
1170
1171         <dt>URL absolue</dt>
1172
1173         <dd>Si une URL absolue est sp&eacute;cifi&eacute;e,
1174         <module>mod_rewrite</module> v&eacute;rifie si le nom d'h&ocirc;te
1175         correspond &agrave; celui de l'h&ocirc;te local. Si c'est le cas, le
1176         protocole et le nom d'h&ocirc;te sont supprim&eacute;s, et ce qui reste est
1177         trait&eacute; comme un chemin d'URL. Dans le cas contraire, une
1178         redirection externe vers l'URL indiqu&eacute;e est effectu&eacute;e. Pour
1179         forcer une redirection externe vers l'h&ocirc;te local, voir le
1180         drapeau <code>[R]</code> ci-dessous.</dd>
1181
1182         <dt><code>-</code> (tiret)</dt>
1183
1184         <dd>Un tiret indique qu'aucune substitution ne doit &ecirc;tre
1185         effectu&eacute;e (le chemin consid&eacute;r&eacute; est transmis sans changement).
1186         Ceci est utile quand un drapeau doit &ecirc;tre appliqu&eacute; sans
1187         modifier le chemin (voir ci-dessous).</dd>
1188
1189       </dl>
1190
1191       <p>En plus du texte, la cha&icirc;ne <em>Substition</em> peut
1192       comporter :</p>
1193
1194       <ol>
1195         <li>des r&eacute;f&eacute;rences arri&egrave;res (<code>$N</code>) vers le mod&egrave;le
1196         d'une directive RewriteRule</li>
1197
1198         <li>des r&eacute;f&eacute;rences arri&egrave;res (<code>%N</code>) vers le dernier
1199         mod&egrave;le d'une directive RewriteCond qui correspondait</li>
1200
1201         <li>des variables du serveur comme dans les cha&icirc;nes de test de
1202         condition d'une r&egrave;gle (<code>%{VARNAME}</code>)</li>
1203
1204         <li>des appels de
1205         <a href="#mapfunc">fonctions de comparaison</a>
1206         (<code>${nom correspondance:cl&eacute;|d&eacute;faut}</code>)</li>
1207       </ol>
1208
1209       <p>Les r&eacute;f&eacute;rences arri&egrave;res sont des identificateurs de la forme
1210       <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1211       seront remplac&eacute;s par le contenu du <strong>N</strong>&egrave;me groupe
1212       du <em>Mod&egrave;le</em> qui correspondait. Les variables du serveur
1213       sont les m&ecirc;mes que dans la <em>Cha&icirc;ne de test</em> d'une
1214       directive <code>RewriteCond</code>. Les fonctions de comparaison
1215       sont issues de la directive <code>RewriteMap</code> dans la
1216       section de laquelle elles sont d&eacute;crites. Ces trois types de
1217       variables sont &eacute;valu&eacute;es dans l'ordre ci-dessus.</p>
1218
1219        <p>Chaque r&egrave;gle de r&eacute;&eacute;criture s'applique au r&eacute;sultat de la r&egrave;gle
1220        pr&eacute;c&eacute;dente, selon l'ordre dans lequel elles ont &eacute;t&eacute; d&eacute;finies dans
1221        le fichier de configuration. Le chemin de l'URL ou du syst&egrave;me de fichier (voir
1222        ci-dessus <a href="#what_is_matched">Qu'est-ce qui est
1223        compar&eacute; ?</a>) est <strong>int&eacute;gralement
1224       remplac&eacute;e</strong> par la cha&icirc;ne de <em>Substitution</em> et le
1225       processus de r&eacute;&eacute;criture se poursuit jusqu'&agrave; ce que toutes les
1226       r&egrave;gles aient &eacute;t&eacute; appliqu&eacute;es, ou qu'il soit explicitement stopp&eacute;
1227       par un drapeau <a
1228       href="../rewrite/flags.html#flag_l"><code><strong>L</strong></code></a>,
1229       ou par un autre drapeau qui implique un arr&ecirc;t imm&eacute;diat, comme
1230       <code><strong>END</strong></code> ou
1231       <code><strong>F</strong></code>.</p>
1232
1233      <note><title>Modifier la cha&icirc;ne de requ&ecirc;te</title>
1234       <p>Par d&eacute;faut, la cha&icirc;ne de requ&ecirc;te est transmise sans
1235       modification. Vous pouvez cependant cr&eacute;er dans la cha&icirc;ne de
1236       substitution des URLs dont une partie constitue une cha&icirc;ne de
1237       requ&ecirc;te. Pour cela, ajoutez simplement un point d'interrogation
1238       dans la cha&icirc;ne de substitution pour indiquer que le texte qui
1239       suit doit &ecirc;tre r&eacute;inject&eacute; dans la cha&icirc;ne de requ&ecirc;te. Pour
1240       supprimer une cha&icirc;ne de requ&ecirc;te, terminez simplement la cha&icirc;ne de
1241       substitution par un point d'interrogation. Pour combiner les
1242       nouvelles cha&icirc;nes de requ&ecirc;te avec les anciennes, utilisez le
1243       drapeau <code>[QSA]</code>.</p>
1244      </note>
1245
1246
1247       <p>En outre, vous pouvez sp&eacute;cifier des <a name="rewriteflags"
1248       id="rewriteflags">actions</a> sp&eacute;ciales &agrave; effectuer en ajoutant
1249       des
1250       <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1251       comme troisi&egrave;me argument de la directive
1252       <code>RewriteRule</code>. S&eacute;par&eacute;s par des virgules au sein d'une
1253       liste encadr&eacute;e par des crochets, les <em>drapeaux</em> peuvent
1254       &ecirc;tre choisis dans la table suivante. Vous trouverez plus de
1255       d&eacute;tails, et des exemples pour chaque drapeau dans le <a
1256       href="../rewrite/flags.html">document &agrave; propos des drapeaux de
1257       r&eacute;&eacute;criture.</a></p>
1258
1259       <table border="1">
1260     <tr><th>Drapeaux et syntaxe</th>
1261         <th>Fonction</th>
1262     </tr>
1263     <tr>
1264         <td>B</td>
1265         <td>Echappe les caract&egrave;res non-alphanum&eacute;riques <em>avant</em>
1266         d'appliquer la transformation. <em><a
1267         href="../rewrite/flags.html#flag_b">d&eacute;tails ...</a></em></td>
1268     </tr>
1269     <tr>
1270         <td>chain|C</td>
1271         <td>La r&egrave;gle est cha&icirc;n&eacute;e avec la r&egrave;gle suivante. Si la r&egrave;gle
1272         &eacute;choue, la ou les r&egrave;gles avec lesquelles elle est est cha&icirc;n&eacute;e
1273         seront saut&eacute;es. <em><a
1274         href="../rewrite/flags.html#flag_c">d&eacute;tails ...</a></em></td>
1275     </tr>
1276     <tr>
1277         <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1278         <td>D&eacute;finit un cookie au niveau du navigateur client. La syntaxe
1279         compl&egrave;te est :
1280         CO=<em>NAME</em>:<em>VAL</em>:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>[:<em>secure</em>[:<em>httponly</em>]]]] <em><a href="../rewrite/flags.html#flag_co">details ...</a></em>
1281         <em><a href="../rewrite/flags.html#flag_co">d&eacute;tails ...</a></em>
1282         </td>
1283     </tr>
1284     <tr>
1285         <td>discardpath|DPI</td>
1286         <td>Supprime la partie PATH_INFO de l'URI r&eacute;&eacute;crit. <em><a
1287         href="../rewrite/flags.html#flag_dpi">d&eacute;tails
1288         ...</a></em></td>
1289     </tr>
1290     <tr>
1291         <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
1292         <td>D&eacute;finit la variable d'environnement <em>VAR</em> (&agrave; la valeur
1293         <em>VAL</em> si elle est fournie). La variante !<em>VAR</em>
1294         annule la d&eacute;finition de la variable <em>VAR</em>.<em><a
1295         href="../rewrite/flags.html#flag_e">d&eacute;tails ...</a></em></td>
1296     </tr>
1297     <tr>
1298         <td>forbidden|F</td>
1299         <td>Renvoie une r&eacute;ponse 403 FORBIDDEN au navigateur client.
1300         <em><a href="../rewrite/flags.html#flag_f">d&eacute;tails ...</a></em></td>
1301     </tr>
1302     <tr>
1303         <td>gone|G</td>
1304         <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a
1305         href="../rewrite/flags.html#flag_g">d&eacute;tails ...</a></em></td>
1306     </tr>
1307     <tr>
1308         <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1309         <td>L'URI r&eacute;sultant est envoy&eacute; au <em>Gestionnaire de
1310         contenu</em> pour traitement. <em><a
1311         href="../rewrite/flags.html#flag_h">d&eacute;tails ...</a></em></td>
1312     </tr>
1313     <tr>
1314         <td>last|L</td>
1315         <td>Arr&ecirc;te le processus de r&eacute;&eacute;criture imm&eacute;diatement et n'applique
1316         plus aucune r&egrave;gle. Pr&ecirc;tez une attention particuli&egrave;re aux mises
1317         en garde concernant les contextes de niveau r&eacute;pertoire et
1318         .htaccess (voir aussi le drapeau END). <em><a
1319         href="../rewrite/flags.html#flag_l">d&eacute;tails ...</a></em></td>
1320     </tr>
1321     <tr>
1322         <td>next|N</td>
1323         <td>R&eacute;ex&eacute;cute le processus de r&eacute;&eacute;criture &agrave; partir de la premi&egrave;re
1324         r&egrave;gle, en utilisant le r&eacute;sultat du jeu de r&egrave;gles, sous r&eacute;serve
1325         qu'il y ait un point de d&eacute;part. <em><a
1326         href="../rewrite/flags.html#flag_n">d&eacute;tails
1327         ...</a></em></td>
1328     </tr>
1329     <tr>
1330         <td>nocase|NC</td>
1331         <td>Rend la comparaison entre mod&egrave;les insensible &agrave; la casse.
1332         <em><a href="../rewrite/flags.html#flag_nc">d&eacute;tails ...</a></em></td>
1333     </tr>
1334     <tr>
1335         <td>noescape|NE</td>
1336         <td>Emp&ecirc;che mod_rewrite d'effectuer un &eacute;chappement hexad&eacute;cimal
1337         des caract&egrave;res sp&eacute;ciaux dans le r&eacute;sultat de la r&eacute;&eacute;criture. <em><a
1338         href="../rewrite/flags.html#flag_ne">d&eacute;tails ...</a></em></td>
1339     </tr>
1340     <tr>
1341         <td>nosubreq|NS</td>
1342         <td>La r&egrave;gle est saut&eacute;e si la requ&ecirc;te courante est une
1343         sous-requ&ecirc;te interne. <em><a
1344         href="../rewrite/flags.html#flag_ns">d&eacute;tails ...</a></em></td>
1345     </tr>
1346     <tr>
1347         <td>proxy|P</td>
1348         <td>Force l'envoi en interne de l'URL de substitution en tant
1349         que requ&ecirc;te mandataire. <em><a
1350         href="../rewrite/flags.html#flag_p">d&eacute;tails
1351         ...</a></em></td>
1352     </tr>
1353     <tr>
1354         <td>passthrough|PT</td>
1355         <td>L'URI r&eacute;sultant est repass&eacute; au moteur de mise en
1356         correspondance des URLs pour y &ecirc;tre trait&eacute; par d'autres
1357         traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1358         <code>Redirect</code>. <em><a
1359         href="../rewrite/flags.html#flag_pt">d&eacute;tails ...</a></em></td>
1360     </tr>
1361     <tr>
1362         <td>qsappend|QSA</td>
1363         <td>Ajoute toute cha&icirc;ne de param&egrave;tres pr&eacute;sente dans l'URL de la
1364         requ&ecirc;te originale &agrave; toute cha&icirc;ne de param&egrave;tres cr&eacute;&eacute;e dans la
1365         cible de r&eacute;&eacute;criture. <em><a
1366         href="../rewrite/flags.html#flag_qsa">d&eacute;tails ...</a></em></td>
1367     </tr>
1368     <tr>
1369         <td>qsdiscard|QSD</td>
1370         <td>Supprime toute cha&icirc;ne de param&egrave;tres de l'URI entrant. <em><a
1371         href="../rewrite/flags.html#flag_qsd">d&eacute;tails
1372         ...</a></em></td>
1373     </tr>
1374     <tr>
1375         <td>redirect|R[=<em>code</em>]</td>
1376         <td>Force une redirection externe, avec un code de statut HTTP
1377         optionnel. <em><a
1378         href="../rewrite/flags.html#flag_r">d&eacute;tails ...</a></em>
1379         </td>
1380     </tr>
1381     <tr>
1382         <td>END</td>
1383         <td>Arr&ecirc;te le processus de r&eacute;&eacute;criture imm&eacute;diatement et
1384         n'applique plus aucune r&egrave;gle. Emp&ecirc;che aussi l'ex&eacute;cution
1385         ult&eacute;rieure de r&egrave;gles de r&eacute;&eacute;criture dans des contextes de
1386         r&eacute;pertoire et des fichiers .htaccess (disponible depuis la
1387         version 2.3.9) <em><a
1388         href="../rewrite/flags.html#flag_l">d&eacute;tails ...</a></em></td>
1389     </tr>
1390     <tr>
1391         <td>skip|S=<em>nombre</em></td>
1392         <td>Si la r&egrave;gle courante s'applique, le moteur de r&eacute;&eacute;criture
1393         doit sauter les <em>nombre</em> r&egrave;gles suivantes. <em><a
1394         href="../rewrite/flags.html#flag_s">d&eacute;tails ...</a></em></td>
1395     </tr>
1396     <tr>
1397         <td>type|T=<em>MIME-type</em></td>
1398         <td>Force l'attribution du <glossary>Type-MIME</glossary>
1399         sp&eacute;cifi&eacute; au fichier cible. <em><a
1400         href="../rewrite/flags.html#flag_t">d&eacute;tails ...</a></em></td>
1401     </tr>
1402     </table>
1403
1404 <note><title>D&eacute;veloppement du r&eacute;pertoire home</title>
1405 <p> Quand la cha&icirc;ne de substitution commence par quelque chose comme
1406 "/~user" (de mani&egrave;re explicite ou par r&eacute;f&eacute;rences arri&egrave;res), mod_rewrite
1407 d&eacute;veloppe le r&eacute;pertoire home sans tenir compte de la pr&eacute;sence ou de la
1408 configuration du module <module>mod_userdir</module>.</p>
1409
1410 <p> Ce d&eacute;veloppement n'est pas effectu&eacute; si le drapeau <em>PT</em> est
1411 utilis&eacute; dans la directive <directive module="mod_rewrite">RewriteRule</directive></p>
1412 </note>
1413
1414      <p>Voici toutes les combinaisons de substitution et leurs
1415      significations :</p>
1416
1417       <p><strong>Dans la configuration au niveau du serveur principal
1418       (<code>httpd.conf</code>)<br />
1419        pour la requ&ecirc;te ``<code>GET
1420       /chemin/infochemin</code>'':</strong><br />
1421       </p>
1422
1423 <table border="1">
1424 <tr>
1425 <th>R&egrave;gle</th>
1426 <th>R&eacute;sultat de la substitution</th>
1427 </tr>
1428
1429 <tr>
1430 <td>^/un_chemin(.*) autre_chemin$1</td>
1431 <td>invalide, non support&eacute;</td>
1432 </tr>
1433
1434 <tr>
1435 <td>^/un_chemin(.*) autre_chemin$1  [R]</td>
1436 <td>invalide, non support&eacute;</td>
1437 </tr>
1438
1439 <tr>
1440 <td>^/un_chemin(.*) autre_chemin$1  [P]</td>
1441 <td>invalide, non support&eacute;</td>
1442 </tr>
1443
1444 <tr>
1445 <td>^/un_chemin(.*) /autre_chemin$1</td>
1446 <td>/autre_chemin/info_chemin</td>
1447 </tr>
1448
1449 <tr>
1450 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1451 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1452 </tr>
1453
1454 <tr>
1455 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1456 <td>sans objet, non support&eacute;</td>
1457 </tr>
1458
1459 <tr>
1460 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1461 <td>/autre_chemin/info_chemin</td>
1462 </tr>
1463
1464 <tr>
1465 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1466 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1467 </tr>
1468
1469 <tr>
1470 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1471 <td>sans objet, non support&eacute;</td>
1472 </tr>
1473
1474 <tr>
1475 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1476 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1477 </tr>
1478
1479 <tr>
1480 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1481 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1482 redondant)</td>
1483 </tr>
1484
1485 <tr>
1486 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1487 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1488 </tr>
1489 </table>
1490
1491       <p><strong>Dans une configuration de niveau r&eacute;pertoire pour
1492       <code>/chemin</code><br />
1493        (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1494       <code>RewriteBase /chemin</code>)<br />
1495        pour la requ&ecirc;te ``<code>GET
1496       /chemin/chemin-local/infochemin</code>'':</strong><br />
1497      </p>
1498
1499 <table border="1">
1500
1501 <tr>
1502 <th>R&egrave;gle</th>
1503 <th>R&eacute;sultat de la substitution</th>
1504 </tr>
1505
1506 <tr>
1507 <td>^chemin-local(.*) autre-chemin$1</td>
1508 <td>/chemin/autre-chemin/infochemin</td>
1509 </tr>
1510
1511 <tr>
1512 <td>^chemin-local(.*) autre-chemin$1  [R]</td>
1513 <td>http://cet-h&ocirc;te/chemin/autre-chemin/infochemin via redirection
1514 externe</td>
1515 </tr>
1516
1517 <tr>
1518 <td>^chemin-local(.*) autre-chemin$1  [P]</td>
1519 <td>n'a pas lieu d'&ecirc;tre, non support&eacute;</td>
1520 </tr>
1521
1522 <tr>
1523 <td>^chemin-local(.*) /autre-chemin$1</td>
1524 <td>/autre-chemin/infochemin</td>
1525 </tr>
1526
1527 <tr>
1528 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1529 <td>http://cet-h&ocirc;te/autre-chemin/infochemin via redirection externe</td>
1530 </tr>
1531
1532 <tr>
1533 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1534 <td>n'a pas lieu d'&ecirc;tre, non support&eacute;</td>
1535 </tr>
1536
1537 <tr>
1538 <td>^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1</td>
1539 <td>/autre-chemin/infochemin</td>
1540 </tr>
1541
1542 <tr>
1543 <td>^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1 [R]</td>
1544 <td>http://cet-h&ocirc;te/autre-chemin/infochemin via redirection externe</td>
1545 </tr>
1546
1547 <tr>
1548 <td>^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1 [P]</td>
1549 <td>n'a pas lieu d'&ecirc;tre, non support&eacute;</td>
1550 </tr>
1551
1552 <tr>
1553 <td>^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1</td>
1554 <td>http://autre h&ocirc;te/autre-chemin/infochemin via redirection externe</td>
1555 </tr>
1556
1557 <tr>
1558 <td>^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1 [R]</td>
1559 <td>http://autre h&ocirc;te/autre-chemin/infochemin via redirection externe
1560 (le drapeau [R] est redondant)</td>
1561 </tr>
1562
1563 <tr>
1564 <td>^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1 [P]</td>
1565 <td>http://autre h&ocirc;te/autre-chemin/infochemin via un mandataire interne</td>
1566 </tr>
1567
1568 </table>
1569
1570   </usage>
1571  </directivesynopsis>
1572 </modulesynopsis>