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