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