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