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