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