2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision : 1031338 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
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
16 http://www.apache.org/licenses/LICENSE-2.0
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.
25 <modulesynopsis metafile="mod_rewrite.xml.meta">
27 <name>mod_rewrite</name>
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>
33 <status>Extension</status>
34 <sourcefile>mod_rewrite.c</sourcefile>
35 <identifier>rewrite_module</identifier>
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, 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>
59 <p>Vous trouverez d'avantage de détails, discussions et exemples
61 <a href="../rewrite/">documentation détaillée
62 sur mod_rewrite</a>.</p>
65 <section id="logging"><title>Journalisation</title>
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>
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 !
82 <example><title>Exemple</title>
83 LogLevel alert rewrite:trace3
86 <note><title>RewriteLog</title>
87 <p>Ceux qui sont familiers avec les versions précédentes de
88 <module>mod_rewrite</module> vont probablement rechercher en vain les
89 directives <code>RewriteLog</code> et
90 <code>RewriteLogLevel</code>. Elles ont été en effet remplacées
91 par une configuration de la journalisation par module, comme
92 mentionné plus haut.
95 <p>Pour extraire les traces spécifiques à
96 <module>mod_rewrite</module>, affichez le fichier journal en
97 redirigeant la sortie vers grep :</p>
99 tail -f error_log|fgrep '[rewrite:'
106 <name>RewriteEngine</name>
107 <description>Active ou désactive l'exécution du
108 moteur de réécriture</description>
109 <syntax>RewriteEngine on|off</syntax>
110 <default>RewriteEngine off</default>
111 <contextlist><context>server config</context><context>virtual host</context>
112 <context>directory</context><context>.htaccess</context></contextlist>
113 <override>FileInfo</override>
117 <p>La directive <directive>RewriteEngine</directive> active ou
118 désactive l'exécution du moteur de réécriture. Si sa valeur est
119 <code>off</code>, ce module n'exécutera aucun traitement et ne
120 mettra pas à jour les variables d'environnement
121 <code>SCRIPT_URx</code>.</p>
123 <p>Pour désactiver le module, il vaut mieux utiliser cette
124 directive que commenter toutes les directives <directive
125 module="mod_rewrite">RewriteRule</directive> !</p>
127 <p>Notez que les hôtes virtuels n'héritent pas des
128 configurations de réécriture. Ceci implique que vous devez
129 insérer une directive <code>RewriteEngine on</code> dans chaque
130 hôte virtuel pour lequel vous souhaitez utiliser des règles
131 de réécriture.</p>
133 <p>Les directives <directive>RewriteMap</directive> du type
134 <code>prg</code> ne sont pas prises en compte au cours de
135 l'initialisation du serveur si elle ont été définies dans un
136 contexte où la directive <directive>RewriteEngine</directive> n'a
137 pas été définie à <code>on</code>.</p>
144 <name>RewriteOptions</name>
145 <description>Configure certaines options spéciales
146 pour le moteur de réécriture</description>
147 <syntax>RewriteOptions <var>Options</var></syntax>
148 <contextlist><context>server config</context><context>virtual host</context>
149 <context>directory</context><context>.htaccess</context></contextlist>
150 <override>FileInfo</override>
151 <compatibility><code>MaxRedirects</code> n'est plus disponible depuis
152 la version version 2.1</compatibility>
155 <p>La directive <directive>RewriteOptions</directive> définit
156 certaines options spéciales pour la configuration au niveau du
157 serveur ou du répertoire. La chaîne de caractères <em>Option</em>
158 ne peut actuellement prendre qu'une des valeurs suivantes :</p>
161 <dt><code>inherit</code></dt>
164 <p>Ceci force la configuration locale à hériter de la
165 configuration du niveau supérieur. Dans le contexte des hôtes
166 virtuels, cela signifie que les correspondances, conditions et
167 règles du serveur principal sont héritées. Dans le contexte des
168 répertoires, cela signifie que les conditions et règles de la
169 configuration <code>.htaccess</code> ou les sections <directive
170 type="section" module="core">Directory</directive> du répertoire
171 parent sont héritées. Les règles héritées sont virtuellement
172 copiées dans la section où cette directive est utilisée. Si elles
173 sont utilisées avec des règles locales, les règles héritées sont
174 placées après ces dernières. La place de cette directive - avant
175 ou après les règles locales - n'a aucune influance sur ce
176 comportement. Si des règles locales ont forcé l'arrêt de la
177 réécriture, les règles héritées ne seront pas traitées.</p>
179 <note type="warning">
180 Les règles héritées du niveau parent sont appliquées
181 <strong>after</strong> après les règles spécifiées dans le niveau
191 <name>RewriteMap</name>
192 <description>Définit une fonction de mise en correspondance pour la
193 recherche de mots-clés</description>
194 <syntax>RewriteMap <em>nom de la correspondance</em> <em>type de
195 correspondance</em>:<em>source de la correspondance</em>
197 <contextlist><context>server config</context><context>virtual host</context>
199 <compatibility>Il est possible de choisir entre plusieurs types de
200 bases de données depuis la version 2.0.41 du serveur HTTP Apache</compatibility>
203 <p>La directive <directive>RewriteMap</directive> définit une
204 <em>Table de correspondance pour la réécriture</em> que les
205 fonctions de mise en correspondance
206 peuvent utiliser dans les chaînes de substitution des règles
207 pour insérer/substituer des champs en recherchant des mots-clés.
208 La source utilisée pour cette recherche peut être de plusieurs
211 <p><a id="mapfunc" name="mapfunc"><em>nom de la
212 correspondance</em></a> est le nom de la table de correspondance
213 et servira à spécifier une fonction de mise en correspondance
214 pour les chaînes de substitution d'une règle de réécriture selon
215 une des constructions suivantes :</p>
218 <strong><code>${</code> <em>nom de la
219 correspondance</em> <code>:</code>
220 <em>mot-clé</em> <code>}</code><br />
221 <code>${</code> <em>nom de la
222 correspondance</em> <code>:</code>
223 <em>mot-clé</em> <code>|</code> <em>valeur par défaut</em>
224 <code>}</code></strong>
227 <p>Lorsqu'une telle construction est rencontrée, la table de
228 correspondance <em>Nom de la correspondance</em> est consultée
229 et la clé <em>mot-clé</em> recherchée. Si la clé est trouvée, la
230 construction est remplacée par
231 la <em>valeur de remplacement</em>. Si la clé n'est pas trouvée,
232 elle est remplacée par la <em>valeur par défaut</em>, ou par une
233 chaîne vide si aucune <em>valeur par défaut</em> n'est
234 spécifiée. La valeur vide se comporte comme si la
235 clé était absente ; il est donc impossible de distinguer une
236 valeur vide d'une absence de clé.</p>
238 <p>Par exemple, vous pouvez définir une directive
239 <directive>RewriteMap</directive> comme suit </p>
242 RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt
245 <p>Vous pourrez ensuite utiliser cette table dans une
246 directive <directive>RewriteRule</directive> comme suit :</p>
249 RewriteRule ^/ex/(.*) ${map-exemple:$1}
252 <p>Les combinaisons suivantes pour <em>type de correspondance</em>
253 et <em>source de la correspondance</em>
254 peuvent être utilisées :</p>
258 <dd>Un fichier texte contenant des paires clé-valeur séparées
259 par des espaces, une paire par ligne (<a
260 href="../rewrite/rewritemap.html#txt">Détails ...</a>).</dd>
263 <dd>Sélection aléatoire d'une entrée depuis un fichier texte (<a
264 href="../rewrite/rewritemap.html#rnd">Détails ...</a>).</dd>
267 <dd>Recherche une entrée dans un fichier dbm contenant des
268 paires nom-valeur. Le condensé hash est élaboré à partir d'un
269 format de fichier texte via l'utilitaire <code><a
270 href="../programs/httxt2dbm.html">httxt2dbm</a></code> (<a
271 href="../rewrite/rewritemap.html#dbm">Détails ...</a>).</dd>
274 <dd>Une des quatre fonctions internes disponibles que fournit
275 <code>RewriteMap</code>: toupper, tolower, escape ou unescape
276 (<a href="../rewrite/rewritemap.html#int">Détails ...</a>).</dd>
279 <dd>Appelle un programme externe ou un script pour effectuer la
280 réécriture (<a href="../rewrite/rewritemap.html#int">Détails
283 <dt>dbd or fastdbd</dt>
284 <dd>Une commande SQL SELECT à exécuter pour rechercher la cible
285 de réécriture (<a href="../rewrite/rewritemap.html#int">Détails
289 <p>Vous trouverez plus de détails et de nombreux exemples dans le <a
290 href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
296 <name>RewriteBase</name>
297 <description>Définit l'URL de base pour les réécritures au niveau
298 répertoire</description>
299 <syntax>RewriteBase <em>chemin URL</em></syntax>
300 <default>Pas de valeur par défaut</default>
301 <contextlist><context>directory</context><context>.htaccess</context>
303 <override>FileInfo</override>
306 <p>La directive <directive>RewriteBase</directive> définit
307 explicitement le chemin URL de base (et non le chemin du
308 répertoire dans le système de fichiers !) pour les réécritures dans un contexte
309 de répertoire. Lorsque vous utilisez une directive <directive
310 module="mod_rewrite">RewriteRule</directive> dans un fichier
311 <code>.htaccess</code>, <module>mod_rewrite</module> enlève le
312 préfixe de répertoire local avant d'effectuer le traitement, puis
313 réécrit ce qui reste de l'URL. Lorsque la réécriture est terminée,
314 <module>mod_rewrite</module> rajoute automatiquement le préfixe de
315 répertoire local au chemin.</p>
317 <p>Cette directive est <em>requise</em> pour les réécritures
318 dans un contexte de répertoire défini via la directive
319 <directive module="mod_alias">Alias</directive>.</p>
321 <p>Si votre chemin URL n'existe pas réellement dans le système de
322 fichiers, ou ne trouve pas directement sous le répertoire défini
323 par la directive <directive
324 module="core">DocumentRoot</directive>, vous devez utiliser la
325 directive <directive>RewriteBase</directive> dans chaque fichier
326 <code>.htaccess</code> où vous voulez utiliser des directives <directive
327 module="mod_rewrite">RewriteRule</directive>.</p>
329 <p>L'exemple ci-dessous montre comment faire correspondre
330 http://example.com/mon-appli/index.html à
331 /home/www/exemple/nouveau_site.html dans un fichier
332 <code>.htaccess</code>. On suppose que le contenu disponible à
333 http://example.com/ se situe sur le disque à
334 /home/www/exemple/.</p>
339 # Le chemin URL utilisé pour arriver dans ce contexte, et non le chemin
340 # du système de fichiers
341 RewriteBase /mon-appli/
342 RewriteRule ^index\.html$ nouveau_site.html
351 <name>RewriteCond</name>
352 <description>Définit une condition qui devra être satisfaite pour que
353 la réécriture soit effectuée
356 <em>chaîne de test</em> <em>expression de comparaison</em></syntax>
357 <contextlist><context>server config</context><context>virtual host</context>
358 <context>directory</context><context>.htaccess</context></contextlist>
359 <override>FileInfo</override>
362 <p>La directive <directive>RewriteCond</directive> permet de définir une
363 condition d'exécution d'une règle. Une ou plusieurs conditions
364 <directive>RewriteCond</directive> peuvent précéder une
365 directive <directive module="mod_rewrite"
366 >RewriteRule</directive>. La règle de réécriture correspondante n'est
367 ainsi exécutée que si ces conditions sont satisfaites,
368 <strong>et</strong> si l'URI correspond au modèle spécifié dans la
371 <p><em>TestString</em> est une chaîne qui peut contenir les
372 extensions suivantes en plus du texte simple :</p>
376 <strong>références arrières de règle de réécriture</strong> :
377 ce sont des références arrières de la forme
378 <strong><code>$N</code></strong> (0 <= N <= 9). $1 à $9
379 permettent d'accéder aux parties regroupées (entre
380 parenthèses) du modèle, issues de la <code>RewriteRule</code>
381 concernée par le jeu de conditions <code>RewriteCond</code>
382 courant. $0 donne accès à l'ensemble de la chaîne
383 correspondant au modèle.</li>
385 <strong>Références arrières de condition de réécriture
386 </strong> : ce sont des références arrières de la forme
387 <strong><code>%N</code></strong> (0 <= N <= 9). %1 à %9
388 permettent d'accéder aux parties regroupées (entre
389 parenthèses) du modèle, issues de la <code>RewriteRule</code>
390 concernée par le jeu de conditions <code>RewriteCond</code>
391 courant. %0 donne accès à l'ensemble de la chaîne
392 correspondant au modèle.</li>
394 <strong>extensions de table de réécriture</strong> :
395 ce sont des extensions de la forme <strong><code
396 >${nomTable:clé|défaut}</code></strong>. Voir la <a
397 >href="#mapfunc">documentation sur RewriteMap</a>
398 pour plus de détails.
401 <strong>Variables du serveur</strong> :
402 ce sont des variables de la forme
403 <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
404 où <em>NOM_DE_VARIABLE</em> peut contenir une chaîne issue
405 de la liste suivante :
408 <columnspec><column width=".3"/><column width=".3"/>
409 <column width=".3"/></columnspec>
411 <th>En-têtes HTTP :</th> <th>connexion & requête:</th> <th></th>
416 HTTP_USER_AGENT<br />
421 HTTP_PROXY_CONNECTION<br />
432 SCRIPT_FILENAME<br />
442 <th>variables internes au serveur :</th> <th>date et heure :</th> <th>spéciaux :</th>
452 SERVER_PROTOCOL<br />
453 SERVER_SOFTWARE<br />
471 REQUEST_FILENAME<br />
478 <p>Ces variables correspondent toutes aux en-têtes MIME
479 HTTP de mêmes noms, au variables C du serveur HTTP Apache, ou
480 aux champs <code>struct tm</code> du système Unix. La
481 plupart d'entre elles sont documentées ailleurs dans le
482 manuel ou dans la spécification CGI. Parmi les variables
483 spécifiques à mod_rewrite, ou trouve les suivantes :</p>
486 <dt><code>IS_SUBREQ</code></dt>
488 <dd>Contient le texte "true" si la requête en cours
489 de traitement est une sous-requête, "false" dans le
490 cas contraire. Une sous-requête est générée quand un
491 module a besoin de se référer à des fichiers ou URIs
492 addidionnels pour pouvoir mener à bien sa tâche.</dd>
494 <dt><code>API_VERSION</code></dt>
496 <dd>C'est la version de l'API des modules Apache httpd
497 (l'interface interne entre le serveur et les modules)
498 pour la construction courante de httpd, telle qu'elle
499 est définie dans include/ap_mmn.h. La version de l'API
500 des modules correspond à la version du serveur Apache
502 utilisé (par exemple, pour la version 1.3.14 d'Apache
504 il s'agit de la version 19990320:10), mais intéresse
505 principalement les auteurs de modules.</dd>
507 <dt><code>THE_REQUEST</code></dt>
509 <dd>La ligne de requête HTTP complète envoyée par le
510 navigateur au serveur (par exemple, "<code>GET
511 /index.html HTTP/1.1</code>"), à l'exclusion de tout
512 en-tête ajouté par le navigateur.</dd>
514 <dt><code>REQUEST_URI</code></dt>
516 <dd>La ressource demandée dans la ligne de requête
517 HTTP ("/index.html" dans l'exemple ci-dessus).</dd>
519 <dt><code>REQUEST_FILENAME</code></dt>
521 <dd>Le chemin complet local au système de fichiers
522 du fichier ou du script correspondant
523 à la requête, s'il a déjà été déterminé par le serveur
524 au moment où on y fait référence. Dans le cas
525 contraire, et en particulier dans le cas d'un serveur
526 virtuel, <code>REQUEST_FILENAME</code> contient la
527 valeur de <code>REQUEST_URI</code>.</dd>
529 <dt><code>HTTPS</code></dt>
531 <dd>Contient le texte "on" si la connexion
532 utilise SSL/TLS, "off" dans le cas contraire
533 (Cette variable peut être utilisée sans problème, que
534 <module>mod_ssl</module> soit chargé ou non.</dd>
541 <p>Autres points à connaître ::</p>
544 <p>Les variables <code>SCRIPT_FILENAME</code> et
545 <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
546 du champ <code>filename</code> de la
547 structure interne <code>request_rec</code>du serveur HTTP Apache.
548 Le premier nom correspond au nom de variable bien connu CGI,
549 alors que le second est l'équivalent de REQUEST_URI (qui
550 contient la valeur du champ <code>uri</code> de
551 <code>request_rec</code>).</p>
552 <p>Si une substitution intervient et si la réécriture se
553 poursuit, la valeur des deux variables sera mise à jour en
554 conséquence.</p>
555 <p>Dans le contexte du serveur principal (c'est à dire avant que
556 la requête ne soit mise en correspondance avec le système de
557 fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
558 contenir le chemin entier dans le système de fichiers local car
559 ce chemin b'est pas connu à ce stade du traitement. Dans ce cas,
560 les deux variables contiendront la valeur de REQUEST_URI. Pour
561 obtenir le chemin complet de la requête dans le système de
562 fichiers local dans le contexte du serveur principal, utilisez une
563 référence avant à base d'URL
564 <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la valeur
565 finale de REQUEST_FILENAME.</p></li>
569 <code>%{ENV:<em>variable</em>}</code>, où <em>variable</em> peut
570 correspondre à une variable d'environnement quelconque.</li>
572 <code>%{ENV:variable}</code> est aussi disponible, où
573 <em>variable</em> peut correspondre à toute variable
574 d'environnement. Peut être consulté via des structures internes
575 d'Apache httpd et (si on ne les trouve pas ici) via la fonction
576 <code>getenv()</code> à partir du processus du serveur Apache
579 <li>Que <module>mod_ssl</module> soit chargé ou non, on peut
580 utiliser <code>%{SSL:variable}</code>, où <em>variable</em>
581 peut être remplacé par le nom d'une
582 <a href="mod_ssl.html#envvars">variable
583 d'environnement SSL</a> . Si <module>mod_ssl</module> n'est pas
584 chargé, cette variable contiendra toujours une chaîne vide.
585 Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
586 contenir la valeur <code>128</code>.</li>
589 On peut utiliser <code>%{HTTP:en-tête}</code>, où
590 <em>en-tête</em> peut correspondre à tout nom d'en-tête MIME
591 HTTP, pour extraire la valeur d'un en-tête envoyé dans la
592 requête HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
593 contiendra la valeur de l'en-tête HTTP
594 "<code>Proxy-Connection:</code>".
595 Si on utilise un en-tête HTTP
596 dans une condition, et si cette condition est évaluée à
597 <code>vrai</code> pour la requête, cet en-tête sera ajouté à l'en-tête Vary de
598 la réponse. Il ne le sera pas si la condition est évaluée à
599 <code>faux</code>. L'ajout de l'en-tête HTTP à l'en-tête Vary
600 est nécessaire à une mise en cache appropriée.
601 <p>Il faut garder à l'esprit que les conditions suivent une
602 logique de cout-circuit si le drapeau
603 '<strong><code>ornext|OR</code></strong>' est utilisé, et que de
604 ce fait, certaines d'entre elles ne seront pas évaluées.</p>
607 <li>A des fins de référence avant, on peut utiliser,
608 <code>%{LA-U:variable}</code>, qui
609 permet d'effectuer une sous-requête interne à base d'URL, afin
610 de déterminer la valeur finale de <em>variable</em>. Ceci permet
611 d'accéder à la valeur d'une variable pour la réécriture inconnue
612 à ce stade du traitement, mais qui sera définie au
613 cours d'une phase ultérieure.
614 <p>Par exemple, pour effectuer une réécriture dépendant de la
615 variable <code>REMOTE_USER</code> dans le contexte du serveur
616 principal (fichier <code>httpd.conf</code>), vous devez utiliser
617 <code>%{LA-U:REMOTE_USER}</code> - cette variable est définie
618 par la phase d'autorisation qui intervient <em>après</em> la
619 phase de traduction d'URL (pendant laquelle mod_rewrite opère).</p>
620 <p>Par contre, comme mod_rewrite implémente son contexte de
621 répertoire (fichier <code>.htaccess</code>) via la phase Fixup
622 de l'API, et comme la phase d'autorisation intervient
623 <em>avant</em> cette dernière, vous pouvez vous contenter
624 d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
627 <code>%{LA-F:variable}</code> peut être utilisée pour effectuer
628 une sous-requête interne (basée sur le nom de fichier), afin de
629 déterminer la valeur finale de <em>variable</em>. La plupart du
630 temps, elle est identique à LA-U (voir ci-dessus).</li>
634 <p><em>expression de comparaison</em> est une expression
635 rationnelle qui est appliquée à l'instance actuelle de
636 <em>chaîne de test</em>. <em>chaîne de test</em> est d'abord
637 évaluée, puis comparée à
638 l'<em>expression de comparaison</em>.</p>
640 <p><em>expression de comparaison</em> est en général une
641 <em>expression rationnelle compatible perl</em>, mais vous
642 disposez des syntaxes supplémentaires suivantes pour effectuer
643 d'autres tests utiles sur <em>chaîne de test</em> :
647 <li>Vous pouvez préfixer l'expression avec un caractère
648 '<code>!</code>' (point d'exclamation) pour indiquer une
649 expression de <strong>non</strong>-correspondance.</li>
651 <li>Vous pouvez effectuer des comparaisons lexicographiques de
655 <li>'<strong><expression</strong>' (inférieur au sens
656 lexicographique)<br />
657 Traite l'<em>expression</em> comme une chaîne de
658 caractères et la compare lexicographiquement à
659 <em>chaîne de test</em>. La condition est satisfaite si
660 <em>chaîne de test</em> est inférieure au sens
661 lexicographique à l'<em>expression</em>.</li>
663 <li>'<strong>>expression</strong>' (supérieur au sens
664 lexicographique)<br />
665 Traite l'<em>expression</em> comme une chaîne de
666 caractères et la compare lexicographiquement à
667 <em>chaîne de test</em>. La condition est satisfaite si
668 <em>chaîne de test</em> est supérieure au sens
669 lexicographique à l'<em>expression</em>.</li>
671 <li>'<strong>=expression</strong>' (égal au sens
672 lexicographique)<br />
673 Traite l'<em>expression</em> comme une chaîne de
674 caractères et la compare lexicographiquement à
675 <em>chaîne de test</em>. La condition est satisfaite si
676 <em>chaîne de test</em> est égale au sens
677 lexicographique à l'<em>expression</em> (les deux chaînes
678 sont exactement identiques, caractère pour caractère). Si
679 <em>expression</em> est <code>""</code> (deux guillemets),
680 <em>chaîne de test</em> est comparée à la chaîne vide.</li>
682 <li>'<strong><=expression de comparaison</strong>' (inférieur ou égal à
683 au sens lexicographique)<br />
684 Considère l'<em>expression de comparaison</em> comme une
685 chaîne de caractères et la compare au sens lexicographique à
686 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
687 précède lexicographiquement <em>expression de comparaison</em>, ou est
688 égale à <em>expression de comparaison</em> (les deux chaînes
689 sont identiques, caractère pour caractère).</li>
691 <li>'<strong>>=expression de comparaison</strong>'
692 (supérieur ou égal à au sens lexicographique)<br />
693 Considère l'<em>expression de comparaison</em> comme une
694 chaîne de caractères et la compare au sens lexicographique à
695 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
696 suit lexicographiquement <em>expression de comparaison</em>, ou est
697 égale à <em>expression de comparaison</em> (les deux chaînes
698 sont identiques, caractère pour caractère).</li>
702 Vous pouvez effectuer des comparaisons d'entiers :
705 <li>'<strong>-eq</strong>' (est numériquement égal à)<br />
706 La <em>chaîne de test</em> est considérée comme un entier,
707 et est comparée numériquement à l'<em>expression de
708 comparaison</em>. Vrai si les deux expressions sont
709 numériquement égales.</li>
711 <li>'<strong>-ge</strong>' (est numériquement supérieur ou
712 égal à)<br />
713 La <em>chaîne de test</em> est considérée comme un entier,
714 et est comparée numériquement à l'<em>expression de
715 comparaison</em>. Vrai si <em>chaîne de test</em> est
717 supérieure ou égale à <em>expression de comparaison</em>.</li>
719 <li>'<strong>-gt</strong>' (est numériquement supérieur à)<br />
720 La <em>chaîne de test</em> est considérée comme un entier,
721 et est comparée numériquement à l'<em>expression de
722 comparaison</em>. Vrai si <em>chaîne de test</em> est
724 supérieure à <em>expression de comparaison</em>.</li>
726 <li>'<strong>-le</strong>' (est numériquement inférieur ou
727 égal à)<br />
728 La <em>chaîne de test</em> est considérée comme un entier,
729 et est comparée numériquement à l'<em>expression de
730 comparaison</em>. Vrai si <em>chaîne de test</em> est
732 inférieure ou égale à <em>expression de comparaison</em>.
733 Attention à la confusion avec le drapeau <strong>-l</strong>
734 en utilisant la variante the <strong>-L</strong> ou
735 <strong>-h</strong>.</li>
737 <li>'<strong>-lt</strong>' (est numériquement inférieur à)<br />
738 La <em>chaîne de test</em> est considérée comme un entier,
739 et est comparée numériquement à l'<em>expression de
740 comparaison</em>. Vrai si <em>chaîne de test</em> est
742 inférieure à <em>expression de comparaison</em>.
743 Attention à la confusion avec le drapeau <strong>-l</strong>
744 en utilisant la variante the <strong>-L</strong> ou
745 <strong>-h</strong>.</li>
750 <li>Vous pouvez effectuer différents tests sur les attributs de
754 <li>'<strong>-d</strong>' (est un répertoire -
755 <strong>d</strong>irectory)<br />
756 Traite <em>chaîne de test</em> comme un chemin et vérifie
757 s'il existe ou pas, et s'il s'agit d'un répertoire.</li>
759 <li>'<strong>-f</strong>' (est un
760 <strong>f</strong>ichier régulier)<br />
761 Traite <em>chaîne de test</em> comme un chemin et vérifie
762 s'il existe ou pas, et s'il s'agit d'un fichier régulier.</li>
764 <li>'<strong>-F</strong>' (test de l'existence d'un fichier
765 via une sous-requête)<br />
766 Vérifie si <em>chaîne de test</em> est un fichier valide,
767 accessible à travers tous les contrôles d'accès du serveur
768 actuellement configurés pour ce chemin. C'est une
769 sous-requête interne qui effectue cette vérification - à
770 utiliser avec précautions car les performances du serveur
771 peuvent s'en trouver affectées !</li>
773 <li>'<strong>-H</strong>' (est un lien symbolique, selon la
774 convention bash)<br />
775 Voir <strong>-l</strong>.</li>
777 <li>'<strong>-l</strong>' (est un lien symbolique)<br />
778 Considère la <em>chaîne de test</em> comme un chemin et
779 vérifie son existence et si elle est un lien symbolique. On
780 peut aussi utiliser la convention bash <strong>-L</strong>
781 ou <strong>-h</strong> lorsqu'il y a risque de confusion
782 avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</li>
784 <li>'<strong>-L</strong>' (est un lien symbolique, selon la
785 convention bash)<br />
786 Voir <strong>-l</strong>.</li>
788 <li>'<strong>-s</strong>' (est un fichier régulier d'une
789 certaine taille)<br />
790 Considère la <em>chaîne de test</em> comme un chemin et
791 vérifie son existence et si elle est un fichier régulier
792 d'une taille supérieure à zéro.</li>
794 <li>'<strong>-U</strong>' (test de l'existence d'une
795 <strong>U</strong>RL via une sous-requête)<br />
796 Vérifie si <em>chaîne de test</em> est une URL valide,
797 accessible à travers tous les contrôles d'accès du serveur
798 actuellement configurés pour ce chemin. C'est une
799 sous-requête interne qui effectue cette vérification - à
800 utiliser avec précautions car les performances du serveur
801 peuvent s'en trouver affectées !</li>
803 <li>'<strong>-x</strong>' (a l'attribut d'exécution positionné)<br />
804 Considère la <em>chaîne de test</em> comme un chemin et
805 vérifie son existence et si elle a son attribut d'exécution
806 positionné. Ce positionnement est déterminé en fonction de
807 l'OS sous-jacent.</li>
811 <note><title>Note :</title>
812 Tous ces tests peuvent aussi être préfixés par un point
813 d'exclamation ('!') pour inverser leur signification.
817 <li>Vous pouvez aussi définir certains drapeaux pour
818 l'<em>expression de comparaison</em> en ajoutant ces
819 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
820 comme troisième argument de la directive
821 <code>RewriteCond</code>, où <em>drapeaux</em> est un
822 sous-ensemble séparé par des virgules des drapeaux suivants :
825 <li>'<strong><code>nocase|NC</code></strong>'
826 (<strong>n</strong>o <strong>c</strong>ase)<br />
827 Rend le test insensible à la casse - il n'est pas fait de
828 distinction entre majuscules et minuscules, à la fois dans le
829 développement de <em>chaîne de test</em> et dans
830 <em>expression de comparaison</em>. Ce drapeau n'est pris en
831 compte que lors d'une comparaison entre <em>chaîne de test</em>
832 et <em>expression de comparaison</em>. Il ne l'est pas pour les
833 vérification par sous-requêtes ou sur le système de
837 '<strong><code>ornext|OR</code></strong>'
838 (<strong>ou</strong> condition suivante)<br />
839 Permet de chaîner les conditions de règles avec un OU au
840 lieu du AND implicite. Exemple typique :
844 RewriteCond %{REMOTE_HOST} ^host1 [OR]
845 RewriteCond %{REMOTE_HOST} ^host2 [OR]
846 RewriteCond %{REMOTE_HOST} ^host3
847 RewriteRule ...règles concernant tous ces hôtes...
851 Sans ce drapeau, les paires
852 condition/règle devraient être écrites trois fois.
855 <li>'<strong><code>novary|NV</code></strong>'
856 (<strong>n</strong>o <strong>v</strong>ary)<br />
857 Si la condition contient un en-tête HTTP, ce drapeau empêche
858 ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br />
859 L'utilisation de ce drapeau peut provoquer une mise en cache
860 incorrecte de la réponse, si la représentation de cette réponse
861 varie avec la valeur de l'en-tête considéré. Ce drapeau ne
862 devrait donc être utilisé que si l'on maîtrise parfaitement le
863 fonctionnement de l'en-tête Vary.
869 <p><strong>Exemple :</strong></p>
871 <p>Pour réécrire la page d'accueil d'un site en fonction de
872 l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
873 pouvez utiliser ce qui suit : </p>
877 RewriteCond %{HTTP_USER_AGENT} ^Mozilla
878 RewriteRule ^/$ /homepage.max.html [L]
880 RewriteCond %{HTTP_USER_AGENT} ^Lynx
881 RewriteRule ^/$ /homepage.min.html [L]
883 RewriteRule ^/$ /homepage.std.html [L]
887 <p>Explications : si vous utilisez un navigateur
888 (Netscape Navigator, Mozilla etc) qui s'identifie comme
889 'Mozilla', vous accèderez à la page d'accueil max (qui
890 peut contenir des frames, ou d'autres ressources
891 particulières).
892 Si vous utilisez le navigateur Lynx (qui est un navigateur
893 en mode texte), vous accèderez à une page d'accueil min
894 (qui peut être une version conçue pour une navigation simple
895 basée sur le texte).
896 Si aucune de ces conditions n'est satisfaite (vous utilisez tout
897 autre navigateur, ou votre navigateur s'identifie de manière non
898 standard), vous accèderez à la page d'accueil std
906 <name>RewriteRule</name>
907 <description>Définit les règles pour le moteur de réécriture</description>
909 <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</syntax>
910 <contextlist><context>server config</context><context>virtual host</context>
911 <context>directory</context><context>.htaccess</context></contextlist>
912 <override>FileInfo</override>
915 <p>La directive <directive>RewriteRule</directive> est le
916 véritable cheval de trait de la réécriture. La directive peut
917 apparaître plusieurs fois, chaque instance définissant une
918 règle de réécriture particulière. L'ordre dans lequel ces règles
919 sont définies est important - il s'agit de l'ordre dans lequel
920 les règles seront appliquées au cours du processus de
921 réécriture.</p>
923 <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
924 <a id="regexp" name="regexp">expression rationnelle</a>
925 compatible perl. Dans la première règle de réécriture,
926 l'expression est comparée au (%-encoded)
927 <a href="./directive-dict.html#Syntax">chemin de l'URL</a> de la
928 requête ; les expressions suivantes sont comparées à la sortie de
929 la dernière règle de réécriture qui a été appliquée.</p>
931 <note><title>Qu'est-ce qui est comparé ?</title>
932 <p>Le <em>Modèle</em> est d'abord comparé à la partie
933 de l'URL après le nom d'hôte et le port, et avant la chaîne de
936 <p>Dans un contexte de répertoire, <em>Modèle</em> est comparé à
937 ce qui reste de l'URL après suppression du préfixe qui a conduit
938 Apache httpd à la règle courante (voir la directive <directive
939 module="mod_rewrite">RewriteBase</directive>). Le préfixe supprimé
940 se termine toujours par un slash, ce qui signifie que la
941 correspondance se fera toujours avec une chaîne qui ne commence
942 pas par un slash. Un <em>Modèle</em> contenant <code>^/</code> ne
943 correspondra jamais dans un contexte de répertoire.</p>
946 <p>Si vous souhaitez faire une comparaison sur le nom
947 d'hôte, le port, ou la chaîne de requête, utilisez une
948 directive <directive module="mod_rewrite">RewriteCond</directive>
949 comportant respectivement les variables
950 <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
951 <code>%{QUERY_STRING}</code>. Si vous désirez effectuer une
952 correspondance avec l'ensemble du chemin de l'URL dans un contexte
953 de répertoire (htaccess), utilisez la variable
954 <code>%{REQUEST_URI}</code>.</p>
957 <p>Pour quelques conseils à propos des <glossary
958 ref="regex">expressions rationnelles</glossary>, voir le
960 href="../rewrite/intro.html#regex">Introduction à
963 <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON
964 ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
965 d'inverser la signification d'un modèle, soit pour dire
966 ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
967 ce modèle</em>''. Le caractère NON peut donc être utilisé à
968 titre exceptionnel, lorsqu'il est plus simple d'effectuer une
969 comparaison avec le modèle inversé, ou dans la dernière règle
970 par défaut.</p>
972 <note><title>Note</title>
973 Si vous utilisez le caractère NON pour inverser la signification d'un
974 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
975 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
976 pas (autrement dit, sa négation correspond), les groupes sont vides.
977 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
978 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
982 <p>Dans une règle de réécriture,
983 <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
984 de caractères qui remplace le chemin de l'URL original qui
985 correspondait au <em>Modèle</em>. <em>Substitution</em> peut
990 <dt>un chemin du système de fichiers</dt>
992 <dd>Il indique alors la localisation dans le système de
993 fichiers de la ressource qui doit être envoyée au client.</dd>
995 <dt>chemin d'URL</dt>
997 <dd>Un chemin relatif à la valeur de <directive
998 module="core">DocumentRoot</directive> vers la ressource qui
999 doit être servie. Notez que <module>mod_rewrite</module>
1000 essaie de deviner si vous avez spécifié un chemin du système
1001 de fichiers ou un chemin d'URL en vérifiant si la première
1002 partie du chemin existe à la racine du système de fichiers.
1003 Par exemple, si vous avez spécifié comme chaîne de
1004 <em>Substitution</em> <code>/www/file.html</code>, cette
1005 dernière sera traitée comme un chemin d'URL <em>à moins</em>
1006 qu'un répertoire nommé <code>www</code> n'existe à la racine
1007 de votre système de fichiers, auquel cas la chaîne de
1008 substitution sera traitée comme un chemin du système de
1009 fichiers. Si vous désirez que d'autres directives de
1010 correspondance d'URL (comme la directive <directive
1011 module="mod_alias">Alias</directive>) soient appliquées au
1012 chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
1013 comme décrit ci-dessous.</dd>
1015 <dt>URL absolue</dt>
1017 <dd>Si une URL absolue est spécifiée,
1018 <module>mod_rewrite</module> vérifie si le nom d'hôte
1019 correspond à celui de l'hôte local. Si c'est le cas, le
1020 protocole et le nom d'hôte sont supprimés, et ce qui reste est
1021 traité comme un chemin d'URL. Dans le cas contraire, une
1022 redirection externe vers l'URL indiquée est effectuée. Pour
1023 forcer une redirection externe vers l'hôte local, voir le
1024 drapeau <code>[R]</code> ci-dessous.</dd>
1026 <dt><code>-</code> (tiret)</dt>
1028 <dd>Un tiret indique qu'aucune substitution ne doit être
1029 effectuée (le chemin considéré est transmis sans changement).
1030 Ceci est utile quand un drapeau doit être appliqué sans
1031 modifier le chemin (voir ci-dessous).</dd>
1035 <p>En plus du texte, la chaîne <em>Substition</em> peut
1039 <li>des références arrières (<code>$N</code>) vers le modèle
1040 d'une directive RewriteRule</li>
1042 <li>des références arrières (<code>%N</code>) vers le dernier
1043 modèle d'une directive RewriteCond qui correspondait</li>
1045 <li>des variables du serveur comme dans les chaînes de test de
1046 condition d'une règle (<code>%{VARNAME}</code>)</li>
1049 <a href="#mapfunc">fonctions de comparaison</a>
1050 (<code>${nom correspondance:clé|défaut}</code>)</li>
1053 <p>Les références arrières sont des identificateurs de la forme
1054 <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1055 seront remplacés par le contenu du <strong>N</strong>ème groupe
1056 du <em>Modèle</em> qui correspondait. Les variables du serveur
1057 sont les mêmes que dans la <em>Chaîne de test</em> d'une
1058 directive <code>RewriteCond</code>. Les fonctions de comparaison
1059 sont issues de la directive <code>RewriteMap</code> dans la
1060 section de laquelle elles sont décrites. Ces trois types de
1061 variables sont évaluées dans l'ordre ci-dessus.</p>
1063 <p>Comme mentionné précédemment, toutes les règles de
1064 réécriture sont appliquées à la chaîne de <em>Substitution</em>
1065 (selon l'ordre dans lequel elles sont définies dans le fichier
1066 de configuration). L'URL est <strong>intégralement
1067 remplacée</strong> par la chaîne de <em>Substitution</em> et le
1068 processus de réécriture se poursuit jusqu'à ce que toutes les
1069 règles aient été appliquées, ou qu'il soit explicitement stoppé
1070 par un drapeau <code><strong>L</strong></code>.</p>
1072 <note><title>Modifier la chaîne de requête</title>
1073 <p>Par défaut, la chaîne de requête est transmise sans
1074 modification. Vous pouvez cependant créer dans la chaîne de
1075 substitution des URLs dont une partie constitue une chaîne de
1076 requête. Pour cela, ajoutez simplement un point d'interrogation
1077 dans la chaîne de substitution pour indiquer que le texte qui
1078 suit doit être réinjecté dans la chaîne de requête. Pour
1079 supprimer une chaîne de requête, terminez simplement la chaîne de
1080 substitution par un point d'interrogation. Pour combiner les
1081 nouvelles chaînes de requête avec les anciennes, utilisez le
1082 drapeau <code>[QSA]</code>.</p>
1086 <p>En outre, vous pouvez spécifier des <a name="rewriteflags"
1087 id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1089 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1090 comme troisième argument de la directive
1091 <code>RewriteRule</code>. Séparés par des virgules au sein d'une
1092 liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1093 être choisis dans la table suivante. Vous trouverez plus de
1094 détails, et des exemples pour chaque drapeau dans le <a
1095 href="../rewrite/flags.html">document à propos des drapeaux de
1096 réécriture.</a></p>
1099 <tr><th>Drapeaux et syntaxe</th>
1104 <td>Echappe les caractères non-alphanumériques <em>avant</em>
1105 d'appliquer la transformation. <em><a
1106 href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1110 <td>La règle est chaînée avec la règle suivante. Si la règle
1111 échoue, la ou les règles avec lesquelles elle est est chaînée
1112 seront sautées. <em><a
1113 href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1116 <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1117 <td>Définit un cookie au niveau du navigateur client. La syntaxe
1118 complète est :
1119 CO=<em>NAME</em>:<em>VAL</em>[:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>[:<em>secure</em>[:<em>httponly</em>]]]]]
1120 <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1124 <td>discardpathinfo|DPI</td>
1125 <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a
1126 href="../rewrite/flags.html#flag_dpi">détails
1130 <td>env|E=<em>VAR</em>[:<em>VAL</em>]</td>
1131 <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1132 <em>VAL</em> si elle est fournie). <em><a
1133 href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1136 <td>forbidden|F</td>
1137 <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1138 <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1142 <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a
1143 href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1146 <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1147 <td>L'URI résultant est envoyé au <em>Gestionnaire de
1148 contenu</em> pour traitement. <em><a
1149 href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1153 <td>Arrête le processus de réécriture immédiatement et n'applique
1154 plus aucune règle. Prêtez une attention particulière aux mises
1155 en garde concernant les contextes de niveau répertoire et
1156 .htaccess (voir aussi le drapeau END). <em><a
1157 href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1161 <td>Réexécute le processus de réécriture à partir de la première
1162 règle, en utilisant le résultat du jeu de règles, sous réserve
1163 qu'il y ait un point de départ. <em><a
1164 href="../rewrite/flags.html#flag_n">détails
1169 <td>Rend la comparaison entre modèles insensible à la casse.
1170 <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1173 <td>noescape|NE</td>
1174 <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1175 des caractères spéciaux dans le résultat de la réécriture. <em><a
1176 href="../rewrite/flags.html#flag_ne">détails ...</a></em></td>
1179 <td>nosubreq|NS</td>
1180 <td>La règle est sautée si la requête courante est une
1181 sous-requête interne. <em><a
1182 href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1186 <td>Force l'envoi en interne de l'URL de substitution en tant
1187 que requête mandataire. <em><a
1188 href="../rewrite/flags.html#flag_p">détails
1192 <td>passthrough|PT</td>
1193 <td>L'URI résultant est repassé au moteur de mise en
1194 correspondance des URLs pour y être traité par d'autres
1195 traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1196 <code>Redirect</code>. <em><a
1197 href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1200 <td>qsappend|QSA</td>
1201 <td>Ajoute toute chaîne de paramètres créée dans la cible de
1202 réécriture à toute chaîne de paramètres présente dans l'URL de la
1203 requête originale. <em><a
1204 href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1207 <td>qsdiscard|QSD</td>
1208 <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a
1209 href="../rewrite/flags.html#flag_qsd">détails
1213 <td>redirect|R[=<em>code</em>]</td>
1214 <td>Force une redirection externe, avec un code de statut HTTP
1216 href="../rewrite/flags.html#flag_r">détails ...</a></em>
1221 <td>Arrête le processus de réécriture immédiatement et
1222 n'applique plus aucune règle. Empêche aussi l'exécution
1223 ultérieure de règles de réécriture dans des contextes de
1224 répertoire et des fichiers .htaccess (disponible depuis la
1225 version 2.3.9) <em><a
1226 href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1229 <td>skip|S=<em>nombre</em></td>
1230 <td>Si la règle courante s'applique, le moteur de réécriture
1231 doit sauter les <em>nombre</em> règles suivantes. <em><a
1232 href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1235 <td>tyle|T=<em>Type-MIME</em></td>
1236 <td>Force l'attribution du <glossary>Type-MIME</glossary>
1237 spécifié au fichier cible. <em><a
1238 href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1242 <note><title>Développement du répertoire home</title>
1243 <p> Quand la chaîne de substitution commence par quelque chose comme
1244 "/~user" (de manière explicite ou par références arrières), mod_rewrite
1245 développe le répertoire home sans tenir compte de la présence ou de la
1246 configuration du module <module>mod_userdir</module>.</p>
1248 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1249 utilisé dans la directive <directive module="mod_rewrite">RewriteRule</directive></p>
1252 <note><title>Réécritures dans le contexte de répertoire</title>
1254 <p>Le moteur de réécriture peut être utilisé dans les fichiers <a
1255 href="../howto/htaccess.html">.htaccess</a>. Pour activer le moteur de
1256 réécriture pour ces fichiers, vous devez préciser "<code>RewriteEngine
1257 On</code>" <strong>et</strong> "<code>Options FollowSymLinks</code>"
1258 doit être activé. Si votre administrateur a interdit la surcharge de
1259 <code>FollowSymLinks</code> pour un répertoire utilisateur, vous ne
1260 pouvez pas utiliser le moteur de réécriture. Cette restriction est
1261 nécessaire pour des raisons de sécurité.</p>
1263 <p>Lorsqu'on utilise le moteur de réécriture dans les fichiers
1264 <code>.htaccess</code>, le préfixe du répertoire (qui est
1265 toujours le même pour un répertoire donné) est automatiquement
1266 <em>supprimé</em> pour la comparaison du modèle et automatiquement
1267 <em>ajouté</em> une fois la substitution effectuée. Cette fonctionnalité
1268 est nécessaire pour de nombreux cas de réécriture ; sans elle, vous
1269 seriez obligé de tenir compte du répertoire parent pour la comparaison,
1270 ce qui n'est pas toujours
1271 possible. Il y a une exception : si une chaîne de substitution commence
1272 par <code>http://</code>, le préfixe du répertoire ne sera
1273 <strong>pas</strong> ajouté, et une redirection externe (ou le passage
1274 par un mandataire, si le drapeau <strong>P</strong> est utilisé) sera
1275 initiée. Voir la directive <directive
1276 module="mod_rewrite">RewriteBase</directive> pour plus de détails.</p>
1278 <p>Le moteur de réécriture peut aussi être utilisé dans les sections
1279 <directive type="section" module="core">Directory</directive> avec les
1280 mêmes règles de comparaison des préfixes que celles qui s'appliquent
1281 pour les fichiers <code>.htaccess</code>. Cependant, il est en général
1282 plus simple, pour éviter la complication des substitutions de préfixes,
1283 de définir les règles de réécriture dans le contexte du serveur
1284 principal ou des hôtes virtuels, plutôt que dans une section
1285 <directive type="section" module="core">Directory</directive>.</p>
1287 <p>Bien que du point de vue syntaxique, il soit permis de définir des
1288 règles de réécriture dans les sections <directive type="section"
1289 module="core">Location</directive> et <directive
1290 type="section" module="core">Files</directive>, ce n'est à priori
1291 d'aucune utilité et n'est pas supporté.</p>
1295 <p>Voici toutes les combinaisons de substitution et leurs
1296 significations :</p>
1298 <p><strong>Dans la configuration au niveau du serveur principal
1299 (<code>httpd.conf</code>)<br />
1300 pour la requête ``<code>GET
1301 /chemin/infochemin</code>'':</strong><br />
1306 <th>Règle</th>
1307 <th>Résultat de la substitution</th>
1311 <td>^/un_chemin(.*) autre_chemin$1</td>
1312 <td>invalide, non supporté</td>
1316 <td>^/un_chemin(.*) autre_chemin$1 [R]</td>
1317 <td>invalide, non supporté</td>
1321 <td>^/un_chemin(.*) autre_chemin$1 [P]</td>
1322 <td>invalide, non supporté</td>
1326 <td>^/un_chemin(.*) /autre_chemin$1</td>
1327 <td>/autre_chemin/info_chemin</td>
1331 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1332 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1336 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1337 <td>sans objet, non supporté</td>
1341 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1342 <td>/autre_chemin/info_chemin</td>
1346 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1347 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1351 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1352 <td>sans objet, non supporté</td>
1356 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1357 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1361 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1362 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1367 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1368 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1372 <p><strong>Dans une configuration de niveau répertoire pour
1373 <code>/chemin</code><br />
1374 (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1375 <code>RewriteBase /chemin</code>)<br />
1376 pour la requête ``<code>GET
1377 /chemin/chemin-local/infochemin</code>'':</strong><br />
1383 <th>Règle</th>
1384 <th>Résultat de la substitution</th>
1388 <td>^chemin-local(.*) autre-chemin$1</td>
1389 <td>/chemin/autre-chemin/infochemin</td>
1393 <td>^chemin-local(.*) autre-chemin$1 [R]</td>
1394 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1399 <td>^chemin-local(.*) autre-chemin$1 [P]</td>
1400 <td>n'a pas lieu d'être, non supporté</td>
1404 <td>^chemin-local(.*) /autre-chemin$1</td>
1405 <td>/autre-chemin/infochemin</td>
1409 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1410 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1414 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1415 <td>n'a pas lieu d'être, non supporté</td>
1419 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1420 <td>/autre-chemin/infochemin</td>
1424 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1425 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1429 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1430 <td>n'a pas lieu d'être, non supporté</td>
1434 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1435 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1439 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1440 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1441 (le drapeau [R] est redondant)</td>
1445 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1446 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1452 </directivesynopsis>