1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>mod_rewrite - Serveur Apache HTTP</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
14 <div id="page-header">
15 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
16 <p class="apache">Serveur Apache HTTP Version 2.3</p>
17 <img alt="" src="../images/feather.gif" /></div>
18 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
20 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Modules</a></div>
21 <div id="page-content">
22 <div id="preamble"><h1>Module Apache mod_rewrite</h1>
24 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> |
25 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p>
27 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Ce module fournit un moteur de réécriture à base de
28 règles permettant de réécrire les URLs des requêtes
30 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
31 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>rewrite_module</td></tr>
32 <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_rewrite.c</td></tr></table>
35 <p>Le module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> utilise un moteur de
36 réécriture à base de règles, basé sur un interpréteur
37 d'expressions rationnelles, pour réécrire les URLs à la volée. Par
38 défaut, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> met en correspondance une URL
39 avec le système de fichiers. Cependant, on peut aussi l'utiliser
40 pour rediriger une URL vers une autre URL, ou pour invoquer une
41 requête interne à destination du mandataire.</p>
42 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> fournit une méthode souple et
43 puissante pour manipuler les URLs en utilisant un nombre illimité
44 de règles. Chaque règle peut être associée à un nombre illimité de
45 conditions, afin de vous permettre de réécrire les URLs en
46 fonction de variables du serveur, de variables d'environnement,
47 d'en-têtes HTTP, ou de repères temporels.</p>
48 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> agit sur la totalité de l'URL, y
49 compris la partie chemin. Une règle de réécriture peut être
50 invoquée dans <code>httpd.conf</code> ou dans un fichier
51 <code>.htaccess</code>. Le chemin généré par une règle de
52 réécriture peut inclure une chaîne de paramètres, ou peut renvoyer
53 vers un traitement secondaire interne, une redirection vers une
54 requête externe ou vers le mandataire interne.</p>
56 <p>Vous trouverez d'avantage de détails, discussions et exemples
58 <a href="../rewrite/">documentation détaillée
59 sur mod_rewrite</a>.</p>
61 <div id="quickview"><h3 class="directives">Directives</h3>
63 <li><img alt="" src="../images/down.gif" /> <a href="#rewritebase">RewriteBase</a></li>
64 <li><img alt="" src="../images/down.gif" /> <a href="#rewritecond">RewriteCond</a></li>
65 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteengine">RewriteEngine</a></li>
66 <li><img alt="" src="../images/down.gif" /> <a href="#rewritemap">RewriteMap</a></li>
67 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteoptions">RewriteOptions</a></li>
68 <li><img alt="" src="../images/down.gif" /> <a href="#rewriterule">RewriteRule</a></li>
72 <li><img alt="" src="../images/down.gif" /> <a href="#logging">Journalisation</a></li>
74 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
76 <h2><a name="logging" id="logging">Journalisation</a></h2>
78 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> offre une journalisation détaillée
79 de ses actions aux niveaux de journalisation <code>trace1</code> à
80 <code>trace8</code>. Le niveau de journalisation peut être défini de
81 manière spécifique à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> via la directive
82 <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> : jusqu'au niveau
83 <code>debug</code> aucune action n'est journalisée, alors qu'elles
84 le sont pratiquement toutes au niveau <code>trace8</code>.</p>
87 L'utilisation d'un niveau de journalisation élevé pour
88 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> va ralentir votre serveur HTTP Apache
89 de manière dramatique ! N'utilisez un niveau de journalisation
90 supérieur à <code>trace2</code> qu'à des fins de débogage !
93 <div class="example"><h3>Exemple</h3><p><code>
94 LogLevel alert rewrite:trace3
97 <div class="note"><h3>RewriteLog</h3>
98 <p>Ceux qui sont familiers avec les versions précédentes de
99 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vont probablement rechercher en vain les
100 directives <code>RewriteLog</code> et
101 <code>RewriteLogLevel</code>. Elles ont été en effet remplacées
102 par une configuration de la journalisation par module, comme
106 <p>Pour extraire les traces spécifiques à
107 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, affichez le fichier journal en
108 redirigeant la sortie vers grep :</p>
109 <div class="example"><p><code>
110 tail -f error_log|fgrep '[rewrite:'
115 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
116 <div class="directive-section"><h2><a name="RewriteBase" id="RewriteBase">RewriteBase</a> <a name="rewritebase" id="rewritebase">Directive</a></h2>
117 <table class="directive">
118 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'URL de base pour les réécritures au niveau
120 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteBase <em>chemin URL</em></code></td></tr>
121 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Pas de valeur par défaut</code></td></tr>
122 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
123 <tr><th><a href="directive-dict.html#Override">Annuler:</a></th><td>FileInfo</td></tr>
124 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
125 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
127 <p>La directive <code class="directive">RewriteBase</code> définit
128 explicitement le chemin URL de base (et non le chemin du
129 répertoire dans le système de fichiers !) pour les réécritures dans un contexte
130 de répertoire. Lorsque vous utilisez une directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code> dans un fichier
131 <code>.htaccess</code>, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> enlève le
132 préfixe de répertoire local avant d'effectuer le traitement, puis
133 réécrit ce qui reste de l'URL. Lorsque la réécriture est terminée,
134 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> rajoute automatiquement le préfixe de
135 répertoire local au chemin.</p>
137 <p>Cette directive est <em>requise</em> pour les réécritures
138 dans un contexte de répertoire défini via la directive
139 <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>.</p>
141 <p>Si votre chemin URL n'existe pas réellement dans le système de
142 fichiers, ou ne trouve pas directement sous le répertoire défini
143 par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>, vous devez utiliser la
144 directive <code class="directive">RewriteBase</code> dans chaque fichier
145 <code>.htaccess</code> où vous voulez utiliser des directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code>.</p>
147 <p>L'exemple ci-dessous montre comment faire correspondre
148 http://example.com/mon-appli/index.html à
149 /home/www/exemple/nouveau_site.html dans un fichier
150 <code>.htaccess</code>. On suppose que le contenu disponible à
151 http://example.com/ se situe sur le disque à
152 /home/www/exemple/.</p>
154 <div class="example"><pre>
156 # Le chemin URL utilisé pour arriver dans ce contexte, et non le chemin
157 # du système de fichiers
158 RewriteBase /mon-appli/
159 RewriteRule ^index\.html$ nouveau_site.html
164 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
165 <div class="directive-section"><h2><a name="RewriteCond" id="RewriteCond">RewriteCond</a> <a name="rewritecond" id="rewritecond">Directive</a></h2>
166 <table class="directive">
167 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une condition qui devra être satisfaite pour que
168 la réécriture soit effectuée
170 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code> RewriteCond
171 <em>chaîne de test</em> <em>expression de comparaison</em></code></td></tr>
172 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
173 <tr><th><a href="directive-dict.html#Override">Annuler:</a></th><td>FileInfo</td></tr>
174 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
175 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
177 <p>La directive <code class="directive">RewriteCond</code> permet de définir une
178 condition d'exécution d'une règle. Une ou plusieurs conditions
179 <code class="directive">RewriteCond</code> peuvent précéder une
180 directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code>. La règle de réécriture correspondante n'est
181 ainsi exécutée que si ces conditions sont satisfaites,
182 <strong>et</strong> si l'URI correspond au modèle spécifié dans la
185 <p><em>TestString</em> est une chaîne qui peut contenir les
186 extensions suivantes en plus du texte simple :</p>
190 <strong>références arrières de règle de réécriture</strong> :
191 ce sont des références arrières de la forme
192 <strong><code>$N</code></strong> (0 <= N <= 9). $1 à $9
193 permettent d'accéder aux parties regroupées (entre
194 parenthèses) du modèle, issues de la <code>RewriteRule</code>
195 concernée par le jeu de conditions <code>RewriteCond</code>
196 courant. $0 donne accès à l'ensemble de la chaîne
197 correspondant au modèle.</li>
199 <strong>Références arrières de condition de réécriture
200 </strong> : ce sont des références arrières de la forme
201 <strong><code>%N</code></strong> (0 <= N <= 9). %1 à %9
202 permettent d'accéder aux parties regroupées (entre
203 parenthèses) du modèle, issues de la <code>RewriteRule</code>
204 concernée par le jeu de conditions <code>RewriteCond</code>
205 courant. %0 donne accès à l'ensemble de la chaîne
206 correspondant au modèle.</li>
208 <strong>extensions de table de réécriture</strong> :
209 ce sont des extensions de la forme <strong><code>${nomTable:clé|défaut}</code></strong>. Voir la <a>href="#mapfunc">documentation sur RewriteMap</a>
210 pour plus de détails.
213 <strong>Variables du serveur</strong> :
214 ce sont des variables de la forme
215 <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
216 où <em>NOM_DE_VARIABLE</em> peut contenir une chaîne issue
217 de la liste suivante :
222 <th>En-têtes HTTP :</th> <th>connexion & requête:</th> <th />
227 HTTP_USER_AGENT<br />
232 HTTP_PROXY_CONNECTION<br />
243 SCRIPT_FILENAME<br />
253 <th>variables internes au serveur :</th> <th>date et heure :</th> <th>spéciaux :</th>
263 SERVER_PROTOCOL<br />
264 SERVER_SOFTWARE<br />
282 REQUEST_FILENAME<br />
289 <p>Ces variables correspondent toutes aux en-têtes MIME
290 HTTP de mêmes noms, au variables C du serveur HTTP Apache, ou
291 aux champs <code>struct tm</code> du système Unix. La
292 plupart d'entre elles sont documentées ailleurs dans le
293 manuel ou dans la spécification CGI. Parmi les variables
294 spécifiques à mod_rewrite, ou trouve les suivantes :</p>
297 <dt><code>IS_SUBREQ</code></dt>
299 <dd>Contient le texte "true" si la requête en cours
300 de traitement est une sous-requête, "false" dans le
301 cas contraire. Une sous-requête est générée quand un
302 module a besoin de se référer à des fichiers ou URIs
303 addidionnels pour pouvoir mener à bien sa tâche.</dd>
305 <dt><code>API_VERSION</code></dt>
307 <dd>C'est la version de l'API des modules Apache httpd
308 (l'interface interne entre le serveur et les modules)
309 pour la construction courante de httpd, telle qu'elle
310 est définie dans include/ap_mmn.h. La version de l'API
311 des modules correspond à la version du serveur Apache
313 utilisé (par exemple, pour la version 1.3.14 d'Apache
315 il s'agit de la version 19990320:10), mais intéresse
316 principalement les auteurs de modules.</dd>
318 <dt><code>THE_REQUEST</code></dt>
320 <dd>La ligne de requête HTTP complète envoyée par le
321 navigateur au serveur (par exemple, "<code>GET
322 /index.html HTTP/1.1</code>"), à l'exclusion de tout
323 en-tête ajouté par le navigateur.</dd>
325 <dt><code>REQUEST_URI</code></dt>
327 <dd>La ressource demandée dans la ligne de requête
328 HTTP ("/index.html" dans l'exemple ci-dessus).</dd>
330 <dt><code>REQUEST_FILENAME</code></dt>
332 <dd>Le chemin complet local au système de fichiers
333 du fichier ou du script correspondant
334 à la requête, s'il a déjà été déterminé par le serveur
335 au moment où on y fait référence. Dans le cas
336 contraire, et en particulier dans le cas d'un serveur
337 virtuel, <code>REQUEST_FILENAME</code> contient la
338 valeur de <code>REQUEST_URI</code>.</dd>
340 <dt><code>HTTPS</code></dt>
342 <dd>Contient le texte "on" si la connexion
343 utilise SSL/TLS, "off" dans le cas contraire
344 (Cette variable peut être utilisée sans problème, que
345 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non.</dd>
352 <p>Autres points à connaître ::</p>
355 <p>Les variables <code>SCRIPT_FILENAME</code> et
356 <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
357 du champ <code>filename</code> de la
358 structure interne <code>request_rec</code>du serveur HTTP Apache.
359 Le premier nom correspond au nom de variable bien connu CGI,
360 alors que le second est l'équivalent de REQUEST_URI (qui
361 contient la valeur du champ <code>uri</code> de
362 <code>request_rec</code>).</p>
363 <p>Si une substitution intervient et si la réécriture se
364 poursuit, la valeur des deux variables sera mise à jour en
366 <p>Dans le contexte du serveur principal (c'est à dire avant que
367 la requête ne soit mise en correspondance avec le système de
368 fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
369 contenir le chemin entier dans le système de fichiers local car
370 ce chemin b'est pas connu à ce stade du traitement. Dans ce cas,
371 les deux variables contiendront la valeur de REQUEST_URI. Pour
372 obtenir le chemin complet de la requête dans le système de
373 fichiers local dans le contexte du serveur principal, utilisez une
374 référence avant à base d'URL
375 <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la valeur
376 finale de REQUEST_FILENAME.</p></li>
380 <code>%{ENV:<em>variable</em>}</code>, où <em>variable</em> peut
381 correspondre à une variable d'environnement quelconque.</li>
383 <code>%{ENV:variable}</code> est aussi disponible, où
384 <em>variable</em> peut correspondre à toute variable
385 d'environnement. Peut être consulté via des structures internes
386 d'Apache httpd et (si on ne les trouve pas ici) via la fonction
387 <code>getenv()</code> à partir du processus du serveur Apache
390 <li>Que <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non, on peut
391 utiliser <code>%{SSL:variable}</code>, où <em>variable</em>
392 peut être remplacé par le nom d'une
393 <a href="mod_ssl.html#envvars">variable
394 d'environnement SSL</a> . Si <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> n'est pas
395 chargé, cette variable contiendra toujours une chaîne vide.
396 Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
397 contenir la valeur <code>128</code>.</li>
400 On peut utiliser <code>%{HTTP:en-tête}</code>, où
401 <em>en-tête</em> peut correspondre à tout nom d'en-tête MIME
402 HTTP, pour extraire la valeur d'un en-tête envoyé dans la
403 requête HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
404 contiendra la valeur de l'en-tête HTTP
405 "<code>Proxy-Connection:</code>".
406 Si on utilise un en-tête HTTP
407 dans une condition, et si cette condition est évaluée à
408 <code>vrai</code> pour la requête, cet en-tête sera ajouté à l'en-tête Vary de
409 la réponse. Il ne le sera pas si la condition est évaluée à
410 <code>faux</code>. L'ajout de l'en-tête HTTP à l'en-tête Vary
411 est nécessaire à une mise en cache appropriée.
412 <p>Il faut garder à l'esprit que les conditions suivent une
413 logique de cout-circuit si le drapeau
414 '<strong><code>ornext|OR</code></strong>' est utilisé, et que de
415 ce fait, certaines d'entre elles ne seront pas évaluées.</p>
418 <li>A des fins de référence avant, on peut utiliser,
419 <code>%{LA-U:variable}</code>, qui
420 permet d'effectuer une sous-requête interne à base d'URL, afin
421 de déterminer la valeur finale de <em>variable</em>. Ceci permet
422 d'accéder à la valeur d'une variable pour la réécriture inconnue
423 à ce stade du traitement, mais qui sera définie au
424 cours d'une phase ultérieure.
425 <p>Par exemple, pour effectuer une réécriture dépendant de la
426 variable <code>REMOTE_USER</code> dans le contexte du serveur
427 principal (fichier <code>httpd.conf</code>), vous devez utiliser
428 <code>%{LA-U:REMOTE_USER}</code> - cette variable est définie
429 par la phase d'autorisation qui intervient <em>après</em> la
430 phase de traduction d'URL (pendant laquelle mod_rewrite opère).</p>
431 <p>Par contre, comme mod_rewrite implémente son contexte de
432 répertoire (fichier <code>.htaccess</code>) via la phase Fixup
433 de l'API, et comme la phase d'autorisation intervient
434 <em>avant</em> cette dernière, vous pouvez vous contenter
435 d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
438 <code>%{LA-F:variable}</code> peut être utilisée pour effectuer
439 une sous-requête interne (basée sur le nom de fichier), afin de
440 déterminer la valeur finale de <em>variable</em>. La plupart du
441 temps, elle est identique à LA-U (voir ci-dessus).</li>
445 <p><em>expression de comparaison</em> est une expression
446 rationnelle qui est appliquée à l'instance actuelle de
447 <em>chaîne de test</em>. <em>chaîne de test</em> est d'abord
448 évaluée, puis comparée à
449 l'<em>expression de comparaison</em>.</p>
451 <p><em>expression de comparaison</em> est en général une
452 <em>expression rationnelle compatible perl</em>, mais vous
453 disposez des syntaxes supplémentaires suivantes pour effectuer
454 d'autres tests utiles sur <em>chaîne de test</em> :
458 <li>Vous pouvez préfixer l'expression avec un caractère
459 '<code>!</code>' (point d'exclamation) pour indiquer une
460 expression de <strong>non</strong>-correspondance.</li>
462 <li>Vous pouvez effectuer des comparaisons lexicographiques de
466 <li>'<strong><expression</strong>' (inférieur au sens
467 lexicographique)<br />
468 Traite l'<em>expression</em> comme une chaîne de
469 caractères et la compare lexicographiquement à
470 <em>chaîne de test</em>. La condition est satisfaite si
471 <em>chaîne de test</em> est inférieure au sens
472 lexicographique à l'<em>expression</em>.</li>
474 <li>'<strong>>expression</strong>' (supérieur au sens
475 lexicographique)<br />
476 Traite l'<em>expression</em> comme une chaîne de
477 caractères et la compare lexicographiquement à
478 <em>chaîne de test</em>. La condition est satisfaite si
479 <em>chaîne de test</em> est supérieure au sens
480 lexicographique à l'<em>expression</em>.</li>
482 <li>'<strong>=expression</strong>' (égal au sens
483 lexicographique)<br />
484 Traite l'<em>expression</em> comme une chaîne de
485 caractères et la compare lexicographiquement à
486 <em>chaîne de test</em>. La condition est satisfaite si
487 <em>chaîne de test</em> est égale au sens
488 lexicographique à l'<em>expression</em> (les deux chaînes
489 sont exactement identiques, caractère pour caractère). Si
490 <em>expression</em> est <code>""</code> (deux guillemets),
491 <em>chaîne de test</em> est comparée à la chaîne vide.</li>
493 <li>'<strong><=expression de comparaison</strong>' (inférieur ou égal à
494 au sens lexicographique)<br />
495 Considère l'<em>expression de comparaison</em> comme une
496 chaîne de caractères et la compare au sens lexicographique à
497 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
498 précède lexicographiquement <em>expression de comparaison</em>, ou est
499 égale à <em>expression de comparaison</em> (les deux chaînes
500 sont identiques, caractère pour caractère).</li>
502 <li>'<strong>>=expression de comparaison</strong>'
503 (supérieur ou égal à au sens lexicographique)<br />
504 Considère l'<em>expression de comparaison</em> comme une
505 chaîne de caractères et la compare au sens lexicographique à
506 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
507 suit lexicographiquement <em>expression de comparaison</em>, ou est
508 égale à <em>expression de comparaison</em> (les deux chaînes
509 sont identiques, caractère pour caractère).</li>
513 Vous pouvez effectuer des comparaisons d'entiers :
516 <li>'<strong>-eq</strong>' (est numériquement égal à)<br />
517 La <em>chaîne de test</em> est considérée comme un entier,
518 et est comparée numériquement à l'<em>expression de
519 comparaison</em>. Vrai si les deux expressions sont
520 numériquement égales.</li>
522 <li>'<strong>-ge</strong>' (est numériquement supérieur ou
524 La <em>chaîne de test</em> est considérée comme un entier,
525 et est comparée numériquement à l'<em>expression de
526 comparaison</em>. Vrai si <em>chaîne de test</em> est
528 supérieure ou égale à <em>expression de comparaison</em>.</li>
530 <li>'<strong>-gt</strong>' (est numériquement supérieur à)<br />
531 La <em>chaîne de test</em> est considérée comme un entier,
532 et est comparée numériquement à l'<em>expression de
533 comparaison</em>. Vrai si <em>chaîne de test</em> est
535 supérieure à <em>expression de comparaison</em>.</li>
537 <li>'<strong>-le</strong>' (est numériquement inférieur ou
539 La <em>chaîne de test</em> est considérée comme un entier,
540 et est comparée numériquement à l'<em>expression de
541 comparaison</em>. Vrai si <em>chaîne de test</em> est
543 inférieure ou égale à <em>expression de comparaison</em>.
544 Attention à la confusion avec le drapeau <strong>-l</strong>
545 en utilisant la variante the <strong>-L</strong> ou
546 <strong>-h</strong>.</li>
548 <li>'<strong>-lt</strong>' (est numériquement inférieur à)<br />
549 La <em>chaîne de test</em> est considérée comme un entier,
550 et est comparée numériquement à l'<em>expression de
551 comparaison</em>. Vrai si <em>chaîne de test</em> est
553 inférieure à <em>expression de comparaison</em>.
554 Attention à la confusion avec le drapeau <strong>-l</strong>
555 en utilisant la variante the <strong>-L</strong> ou
556 <strong>-h</strong>.</li>
561 <li>Vous pouvez effectuer différents tests sur les attributs de
565 <li>'<strong>-d</strong>' (est un répertoire -
566 <strong>d</strong>irectory)<br />
567 Traite <em>chaîne de test</em> comme un chemin et vérifie
568 s'il existe ou pas, et s'il s'agit d'un répertoire.</li>
570 <li>'<strong>-f</strong>' (est un
571 <strong>f</strong>ichier régulier)<br />
572 Traite <em>chaîne de test</em> comme un chemin et vérifie
573 s'il existe ou pas, et s'il s'agit d'un fichier régulier.</li>
575 <li>'<strong>-F</strong>' (test de l'existence d'un fichier
576 via une sous-requête)<br />
577 Vérifie si <em>chaîne de test</em> est un fichier valide,
578 accessible à travers tous les contrôles d'accès du serveur
579 actuellement configurés pour ce chemin. C'est une
580 sous-requête interne qui effectue cette vérification - à
581 utiliser avec précautions car les performances du serveur
582 peuvent s'en trouver affectées !</li>
584 <li>'<strong>-H</strong>' (est un lien symbolique, selon la
585 convention bash)<br />
586 Voir <strong>-l</strong>.</li>
588 <li>'<strong>-l</strong>' (est un lien symbolique)<br />
589 Considère la <em>chaîne de test</em> comme un chemin et
590 vérifie son existence et si elle est un lien symbolique. On
591 peut aussi utiliser la convention bash <strong>-L</strong>
592 ou <strong>-h</strong> lorsqu'il y a risque de confusion
593 avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</li>
595 <li>'<strong>-L</strong>' (est un lien symbolique, selon la
596 convention bash)<br />
597 Voir <strong>-l</strong>.</li>
599 <li>'<strong>-s</strong>' (est un fichier régulier d'une
600 certaine taille)<br />
601 Considère la <em>chaîne de test</em> comme un chemin et
602 vérifie son existence et si elle est un fichier régulier
603 d'une taille supérieure à zéro.</li>
605 <li>'<strong>-U</strong>' (test de l'existence d'une
606 <strong>U</strong>RL via une sous-requête)<br />
607 Vérifie si <em>chaîne de test</em> est une URL valide,
608 accessible à travers tous les contrôles d'accès du serveur
609 actuellement configurés pour ce chemin. C'est une
610 sous-requête interne qui effectue cette vérification - à
611 utiliser avec précautions car les performances du serveur
612 peuvent s'en trouver affectées !</li>
614 <li>'<strong>-x</strong>' (a l'attribut d'exécution positionné)<br />
615 Considère la <em>chaîne de test</em> comme un chemin et
616 vérifie son existence et si elle a son attribut d'exécution
617 positionné. Ce positionnement est déterminé en fonction de
618 l'OS sous-jacent.</li>
622 <div class="note"><h3>Note :</h3>
623 Tous ces tests peuvent aussi être préfixés par un point
624 d'exclamation ('!') pour inverser leur signification.
628 <li>Vous pouvez aussi définir certains drapeaux pour
629 l'<em>expression de comparaison</em> en ajoutant ces
630 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
631 comme troisième argument de la directive
632 <code>RewriteCond</code>, où <em>drapeaux</em> est un
633 sous-ensemble séparé par des virgules des drapeaux suivants :
636 <li>'<strong><code>nocase|NC</code></strong>'
637 (<strong>n</strong>o <strong>c</strong>ase)<br />
638 Rend le test insensible à la casse - il n'est pas fait de
639 distinction entre majuscules et minuscules, à la fois dans le
640 développement de <em>chaîne de test</em> et dans
641 <em>expression de comparaison</em>. Ce drapeau n'est pris en
642 compte que lors d'une comparaison entre <em>chaîne de test</em>
643 et <em>expression de comparaison</em>. Il ne l'est pas pour les
644 vérification par sous-requêtes ou sur le système de
648 '<strong><code>ornext|OR</code></strong>'
649 (<strong>ou</strong> condition suivante)<br />
650 Permet de chaîner les conditions de règles avec un OU au
651 lieu du AND implicite. Exemple typique :
653 <div class="example"><pre>
654 RewriteCond %{REMOTE_HOST} ^host1 [OR]
655 RewriteCond %{REMOTE_HOST} ^host2 [OR]
656 RewriteCond %{REMOTE_HOST} ^host3
657 RewriteRule ...règles concernant tous ces hôtes...
660 Sans ce drapeau, les paires
661 condition/règle devraient être écrites trois fois.
664 <li>'<strong><code>novary|NV</code></strong>'
665 (<strong>n</strong>o <strong>v</strong>ary)<br />
666 Si la condition contient un en-tête HTTP, ce drapeau empêche
667 ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br />
668 L'utilisation de ce drapeau peut provoquer une mise en cache
669 incorrecte de la réponse, si la représentation de cette réponse
670 varie avec la valeur de l'en-tête considéré. Ce drapeau ne
671 devrait donc être utilisé que si l'on maîtrise parfaitement le
672 fonctionnement de l'en-tête Vary.
678 <p><strong>Exemple :</strong></p>
680 <p>Pour réécrire la page d'accueil d'un site en fonction de
681 l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
682 pouvez utiliser ce qui suit : </p>
684 <div class="example"><pre>
685 RewriteCond %{HTTP_USER_AGENT} ^Mozilla
686 RewriteRule ^/$ /homepage.max.html [L]
688 RewriteCond %{HTTP_USER_AGENT} ^Lynx
689 RewriteRule ^/$ /homepage.min.html [L]
691 RewriteRule ^/$ /homepage.std.html [L]
694 <p>Explications : si vous utilisez un navigateur
695 (Netscape Navigator, Mozilla etc) qui s'identifie comme
696 'Mozilla', vous accèderez à la page d'accueil max (qui
697 peut contenir des frames, ou d'autres ressources
699 Si vous utilisez le navigateur Lynx (qui est un navigateur
700 en mode texte), vous accèderez à une page d'accueil min
701 (qui peut être une version conçue pour une navigation simple
703 Si aucune de ces conditions n'est satisfaite (vous utilisez tout
704 autre navigateur, ou votre navigateur s'identifie de manière non
705 standard), vous accèderez à la page d'accueil std
710 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
711 <div class="directive-section"><h2><a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a> <a name="rewriteengine" id="rewriteengine">Directive</a></h2>
712 <table class="directive">
713 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active ou désactive l'exécution du
714 moteur de réécriture</td></tr>
715 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteEngine on|off</code></td></tr>
716 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>RewriteEngine off</code></td></tr>
717 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
718 <tr><th><a href="directive-dict.html#Override">Annuler:</a></th><td>FileInfo</td></tr>
719 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
720 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
723 <p>La directive <code class="directive">RewriteEngine</code> active ou
724 désactive l'exécution du moteur de réécriture. Si sa valeur est
725 <code>off</code>, ce module n'exécutera aucun traitement et ne
726 mettra pas à jour les variables d'environnement
727 <code>SCRIPT_URx</code>.</p>
729 <p>Pour désactiver le module, il vaut mieux utiliser cette
730 directive que commenter toutes les directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code> !</p>
732 <p>Notez que les hôtes virtuels n'héritent pas des
733 configurations de réécriture. Ceci implique que vous devez
734 insérer une directive <code>RewriteEngine on</code> dans chaque
735 hôte virtuel pour lequel vous souhaitez utiliser des règles
738 <p>Les directives <code class="directive">RewriteMap</code> du type
739 <code>prg</code> ne sont pas prises en compte au cours de
740 l'initialisation du serveur si elle ont été définies dans un
741 contexte où la directive <code class="directive">RewriteEngine</code> n'a
742 pas été définie à <code>on</code>.</p>
746 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
747 <div class="directive-section"><h2><a name="RewriteMap" id="RewriteMap">RewriteMap</a> <a name="rewritemap" id="rewritemap">Directive</a></h2>
748 <table class="directive">
749 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une fonction de mise en correspondance pour la
750 recherche de mots-clés</td></tr>
751 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteMap <em>nom de la correspondance</em> <em>type de
752 correspondance</em>:<em>source de la correspondance</em>
754 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
755 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
756 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
757 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Il est possible de choisir entre plusieurs types de
758 bases de données depuis la version 2.0.41 du serveur HTTP Apache</td></tr>
760 <p>La directive <code class="directive">RewriteMap</code> définit une
761 <em>Table de correspondance pour la réécriture</em> que les
762 fonctions de mise en correspondance
763 peuvent utiliser dans les chaînes de substitution des règles
764 pour insérer/substituer des champs en recherchant des mots-clés.
765 La source utilisée pour cette recherche peut être de plusieurs
768 <p><a id="mapfunc" name="mapfunc"><em>nom de la
769 correspondance</em></a> est le nom de la table de correspondance
770 et servira à spécifier une fonction de mise en correspondance
771 pour les chaînes de substitution d'une règle de réécriture selon
772 une des constructions suivantes :</p>
775 <strong><code>${</code> <em>nom de la
776 correspondance</em> <code>:</code>
777 <em>mot-clé</em> <code>}</code><br />
778 <code>${</code> <em>nom de la
779 correspondance</em> <code>:</code>
780 <em>mot-clé</em> <code>|</code> <em>valeur par défaut</em>
781 <code>}</code></strong>
784 <p>Lorsqu'une telle construction est rencontrée, la table de
785 correspondance <em>Nom de la correspondance</em> est consultée
786 et la clé <em>mot-clé</em> recherchée. Si la clé est trouvée, la
787 construction est remplacée par
788 la <em>valeur de remplacement</em>. Si la clé n'est pas trouvée,
789 elle est remplacée par la <em>valeur par défaut</em>, ou par une
790 chaîne vide si aucune <em>valeur par défaut</em> n'est
793 <p>Par exemple, vous pouvez définir une directive
794 <code class="directive">RewriteMap</code> comme suit </p>
796 <div class="example"><p><code>
797 RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt
800 <p>Vous pourrez ensuite utiliser cette table dans une
801 directive <code class="directive">RewriteRule</code> comme suit :</p>
803 <div class="example"><p><code>
804 RewriteRule ^/ex/(.*) ${map-exemple:$1}
807 <p>Les combinaisons suivantes pour <em>type de correspondance</em>
808 et <em>source de la correspondance</em>
809 peuvent être utilisées :</p>
813 <dd>Un fichier texte contenant des paires clé-valeur séparées
814 par des espaces, une paire par ligne (<a href="../rewrite/rewritemap.html#txt">Détails ...</a>).</dd>
817 <dd>Sélection aléatoire d'une entrée depuis un fichier texte (<a href="../rewrite/rewritemap.html#rnd">Détails ...</a>).</dd>
820 <dd>Recherche une entrée dans un fichier dbm contenant des
821 paires nom-valeur. Le condensé hash est élaboré à partir d'un
822 format de fichier texte via l'utilitaire <code><a href="../programs/httxt2dbm.html">httxt2dbm</a></code> (<a href="../rewrite/rewritemap.html#dbm">Détails ...</a>).</dd>
825 <dd>Une des quatre fonctions internes disponibles que fournit
826 <code>RewriteMap</code>: toupper, tolower, escape ou unescape
827 (<a href="../rewrite/rewritemap.html#int">Détails ...</a>).</dd>
830 <dd>Appelle un programme externe ou un script pour effectuer la
831 réécriture (<a href="../rewrite/rewritemap.html#int">Détails
834 <dt>dbd or fastdbd</dt>
835 <dd>Une commande SQL SELECT à exécuter pour rechercher la cible
836 de réécriture (<a href="../rewrite/rewritemap.html#int">Détails
840 <p>Vous trouverez plus de détails et de nombreux exemples dans le <a href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
844 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
845 <div class="directive-section"><h2><a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions" id="rewriteoptions">Directive</a></h2>
846 <table class="directive">
847 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options spéciales
848 pour le moteur de réécriture</td></tr>
849 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
850 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
851 <tr><th><a href="directive-dict.html#Override">Annuler:</a></th><td>FileInfo</td></tr>
852 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
853 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
854 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td><code>MaxRedirects</code> n'est plus disponible depuis
855 la version version 2.1</td></tr>
858 <p>La directive <code class="directive">RewriteOptions</code> définit
859 certaines options spéciales pour la configuration au niveau du
860 serveur ou du répertoire. La chaîne de caractères <em>Option</em>
861 ne peut actuellement prendre qu'une des valeurs suivantes :</p>
864 <dt><code>inherit</code></dt>
865 <dd>Ceci force la configuration locale à hériter de la
866 configuration du niveau supérieur. Dans le contexte des hôtes
867 virtuels, cela signifie que les correspondances, conditions et
868 règles du serveur principal sont héritées. Dans le contexte des
869 répertoires, cela signifie que les conditions et règles de la
870 configuration <code>.htaccess</code> ou les sections <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du répertoire
871 parent sont héritées. Les règles héritées sont virtuellement
872 copiées dans la section où cette directive est utilisée. Si elles
873 sont utilisées avec des règles locales, les règles héritées sont
874 placées après ces dernières. La place de cette directive - avant
875 ou après les règles locales - n'a aucune influance sur ce
876 comportement. Si des règles locales ont forcé l'arrêt de la
877 réécriture, les règles héritées ne seront pas traitées.
882 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
883 <div class="directive-section"><h2><a name="RewriteRule" id="RewriteRule">RewriteRule</a> <a name="rewriterule" id="rewriterule">Directive</a></h2>
884 <table class="directive">
885 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit les règles pour le moteur de réécriture</td></tr>
886 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
887 <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
888 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
889 <tr><th><a href="directive-dict.html#Override">Annuler:</a></th><td>FileInfo</td></tr>
890 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
891 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
893 <p>La directive <code class="directive">RewriteRule</code> est le
894 véritable cheval de trait de la réécriture. La directive peut
895 apparaître plusieurs fois, chaque instance définissant une
896 règle de réécriture particulière. L'ordre dans lequel ces règles
897 sont définies est important - il s'agit de l'ordre dans lequel
898 les règles seront appliquées au cours du processus de
901 <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
902 <a id="regexp" name="regexp">expression rationnelle</a>
903 compatible perl. Dans la première règle de réécriture,
904 l'expression est comparée au (%-encoded)
905 <a href="./directive-dict.html#Syntax">chemin de l'URL</a> de la
906 requête ; les expressions suivantes sont comparées à la sortie de
907 la dernière règle de réécriture qui a été appliquée.</p>
909 <div class="note"><h3>Qu'est-ce qui est comparé ?</h3>
910 <p>Le <em>Modèle</em> est d'abord comparé à la partie
911 de l'URL après le nom d'hôte et le port, et avant la chaîne de
914 <p>Dans un contexte de répertoire, <em>Modèle</em> est comparé à
915 ce qui reste de l'URL après suppression du préfixe qui a conduit
916 Apache httpd à la règle courante (voir la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code>). Le préfixe supprimé
917 se termine toujours par un slash, ce qui signifie que la
918 correspondance se fera toujours avec une chaîne qui ne commence
919 pas par un slash. Un <em>Modèle</em> contenant <code>^/</code> ne
920 correspondra jamais dans un contexte de répertoire.</p>
923 <p>Si vous souhaitez faire une comparaison sur le nom
924 d'hôte, le port, ou la chaîne de requête, utilisez une
925 directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
926 comportant respectivement les variables
927 <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
928 <code>%{QUERY_STRING}</code>. Si vous désirez effectuer une
929 correspondance avec l'ensemble du chemin de l'URL dans un contexte
930 de répertoire (htaccess), utilisez la variable
931 <code>%{REQUEST_URI}</code>.</p>
934 <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
935 document <a href="../rewrite/intro.html#regex">Introduction à
938 <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON
939 ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
940 d'inverser la signification d'un modèle, soit pour dire
941 ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
942 ce modèle</em>''. Le caractère NON peut donc être utilisé à
943 titre exceptionnel, lorsqu'il est plus simple d'effectuer une
944 comparaison avec le modèle inversé, ou dans la dernière règle
947 <div class="note"><h3>Note</h3>
948 Si vous utilisez le caractère NON pour inverser la signification d'un
949 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
950 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
951 pas (autrement dit, sa négation correspond), les groupes sont vides.
952 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
953 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
957 <p>Dans une règle de réécriture,
958 <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
959 de caractères qui remplace le chemin de l'URL original qui
960 correspondait au <em>Modèle</em>. <em>Substitution</em> peut
965 <dt>un chemin du système de fichiers</dt>
967 <dd>Il indique alors la localisation dans le système de
968 fichiers de la ressource qui doit être envoyée au client.</dd>
970 <dt>chemin d'URL</dt>
972 <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
973 doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
974 essaie de deviner si vous avez spécifié un chemin du système
975 de fichiers ou un chemin d'URL en vérifiant si la première
976 partie du chemin existe à la racine du système de fichiers.
977 Par exemple, si vous avez spécifié comme chaîne de
978 <em>Substitution</em> <code>/www/file.html</code>, cette
979 dernière sera traitée comme un chemin d'URL <em>à moins</em>
980 qu'un répertoire nommé <code>www</code> n'existe à la racine
981 de votre système de fichiers, auquel cas la chaîne de
982 substitution sera traitée comme un chemin du système de
983 fichiers. Si vous désirez que d'autres directives de
984 correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au
985 chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
986 comme décrit ci-dessous.</dd>
990 <dd>Si une URL absolue est spécifiée,
991 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte
992 correspond à celui de l'hôte local. Si c'est le cas, le
993 protocole et le nom d'hôte sont supprimés, et ce qui reste est
994 traité comme un chemin d'URL. Dans le cas contraire, une
995 redirection externe vers l'URL indiquée est effectuée. Pour
996 forcer une redirection externe vers l'hôte local, voir le
997 drapeau <code>[R]</code> ci-dessous.</dd>
999 <dt><code>-</code> (tiret)</dt>
1001 <dd>Un tiret indique qu'aucune substitution ne doit être
1002 effectuée (le chemin considéré est transmis sans changement).
1003 Ceci est utile quand un drapeau doit être appliqué sans
1004 modifier le chemin (voir ci-dessous).</dd>
1008 <p>En plus du texte, la chaîne <em>Substition</em> peut
1012 <li>des références arrières (<code>$N</code>) vers le modèle
1013 d'une directive RewriteRule</li>
1015 <li>des références arrières (<code>%N</code>) vers le dernier
1016 modèle d'une directive RewriteCond qui correspondait</li>
1018 <li>des variables du serveur comme dans les chaînes de test de
1019 condition d'une règle (<code>%{VARNAME}</code>)</li>
1022 <a href="#mapfunc">fonctions de comparaison</a>
1023 (<code>${nom correspondance:clé|défaut}</code>)</li>
1026 <p>Les références arrières sont des identificateurs de la forme
1027 <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1028 seront remplacés par le contenu du <strong>N</strong>ème groupe
1029 du <em>Modèle</em> qui correspondait. Les variables du serveur
1030 sont les mêmes que dans la <em>Chaîne de test</em> d'une
1031 directive <code>RewriteCond</code>. Les fonctions de comparaison
1032 sont issues de la directive <code>RewriteMap</code> dans la
1033 section de laquelle elles sont décrites. Ces trois types de
1034 variables sont évaluées dans l'ordre ci-dessus.</p>
1036 <p>Comme mentionné précédemment, toutes les règles de
1037 réécriture sont appliquées à la chaîne de <em>Substitution</em>
1038 (selon l'ordre dans lequel elles sont définies dans le fichier
1039 de configuration). L'URL est <strong>intégralement
1040 remplacée</strong> par la chaîne de <em>Substitution</em> et le
1041 processus de réécriture se poursuit jusqu'à ce que toutes les
1042 règles aient été appliquées, ou qu'il soit explicitement stoppé
1043 par un drapeau <code><strong>L</strong></code>.</p>
1045 <div class="note"><h3>Modifier la chaîne de requête</h3>
1046 <p>Par défaut, la chaîne de requête est transmise sans
1047 modification. Vous pouvez cependant créer dans la chaîne de
1048 substitution des URLs dont une partie constitue une chaîne de
1049 requête. Pour cela, ajoutez simplement un point d'interrogation
1050 dans la chaîne de substitution pour indiquer que le texte qui
1051 suit doit être réinjecté dans la chaîne de requête. Pour
1052 supprimer une chaîne de requête, terminez simplement la chaîne de
1053 substitution par un point d'interrogation. Pour combiner les
1054 nouvelles chaînes de requête avec les anciennes, utilisez le
1055 drapeau <code>[QSA]</code>.</p>
1059 <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1061 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1062 comme troisième argument de la directive
1063 <code>RewriteRule</code>. Séparés par des virgules au sein d'une
1064 liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1065 être choisis dans la table suivante. Vous trouverez plus de
1066 détails, et des exemples pour chaque drapeau dans le <a href="../rewrite/flags.html">document à propos des drapeaux de
1069 <table class="bordered">
1070 <tr><th>Drapeaux et syntaxe</th>
1075 <td>Echappe les caractères non-alphanumériques <em>avant</em>
1076 d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1080 <td>La règle est chaînée avec la règle suivante. Si la règle
1081 échoue, la ou les règles avec lesquelles elle est est chaînée
1082 seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1085 <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1086 <td>Définit un cookie au niveau du navigateur client. La syntaxe
1088 CO=<em>NAME</em>:<em>VAL</em>[:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>[:<em>secure</em>[:<em>httponly</em>]]]]]
1089 <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1093 <td>discardpathinfo|DPI</td>
1094 <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails
1098 <td>env|E=<em>VAR</em>[:<em>VAL</em>]</td>
1099 <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1100 <em>VAL</em> si elle est fournie). <em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1103 <td>forbidden|F</td>
1104 <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1105 <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1109 <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1112 <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1113 <td>L'URI résultant est envoyé au <em>Gestionnaire de
1114 contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1118 <td>Arrête le processus de réécriture immédiatement et n'applique
1119 plus aucune règle. Prêtez une attention particulière aux mises
1120 en garde concernant les contextes de niveau répertoire et
1121 .htaccess (voir aussi le drapeau END). <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1125 <td>Réexécute le processus de réécriture à partir de la première
1126 règle, en utilisant le résultat du jeu de règles, sous réserve
1127 qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails
1132 <td>Rend la comparaison entre modèles insensible à la casse.
1133 <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1136 <td>noescape|NE</td>
1137 <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1138 des caractères spéciaux dans le résultat de la réécriture. <em><a href="../rewrite/flags.html#flag_ne">détails ...</a></em></td>
1141 <td>nosubreq|NS</td>
1142 <td>La règle est sautée si la requête courante est une
1143 sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1147 <td>Force l'envoi en interne de l'URL de substitution en tant
1148 que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails
1152 <td>passthrough|PT</td>
1153 <td>L'URI résultant est repassé au moteur de mise en
1154 correspondance des URLs pour y être traité par d'autres
1155 traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1156 <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1159 <td>qsappend|QSA</td>
1160 <td>Ajoute toute chaîne de paramètres créée dans la cible de
1161 réécriture à toute chaîne de paramètres présente dans l'URL de la
1162 requête originale. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1165 <td>qsdiscard|QSD</td>
1166 <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails
1170 <td>redirect|R[=<em>code</em>]</td>
1171 <td>Force une redirection externe, avec un code de statut HTTP
1172 optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em>
1177 <td>Arrête le processus de réécriture immédiatement et
1178 n'applique plus aucune règle. Empêche aussi l'exécution
1179 ultérieure de règles de réécriture dans des contextes de
1180 répertoire et des fichiers .htaccess (disponible depuis la
1181 version 2.3.9) <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1184 <td>skip|S=<em>nombre</em></td>
1185 <td>Si la règle courante s'applique, le moteur de réécriture
1186 doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1189 <td>tyle|T=<em>Type-MIME</em></td>
1190 <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
1191 spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1195 <div class="note"><h3>Développement du répertoire home</h3>
1196 <p> Quand la chaîne de substitution commence par quelque chose comme
1197 "/~user" (de manière explicite ou par références arrières), mod_rewrite
1198 développe le répertoire home sans tenir compte de la présence ou de la
1199 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
1201 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1202 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
1205 <div class="note"><h3>Réécritures dans le contexte de répertoire</h3>
1207 <p>Le moteur de réécriture peut être utilisé dans les fichiers <a href="../howto/htaccess.html">.htaccess</a>. Pour activer le moteur de
1208 réécriture pour ces fichiers, vous devez préciser "<code>RewriteEngine
1209 On</code>" <strong>et</strong> "<code>Options FollowSymLinks</code>"
1210 doit être activé. Si votre administrateur a interdit la surcharge de
1211 <code>FollowSymLinks</code> pour un répertoire utilisateur, vous ne
1212 pouvez pas utiliser le moteur de réécriture. Cette restriction est
1213 nécessaire pour des raisons de sécurité.</p>
1215 <p>Lorsqu'on utilise le moteur de réécriture dans les fichiers
1216 <code>.htaccess</code>, le préfixe du répertoire (qui est
1217 toujours le même pour un répertoire donné) est automatiquement
1218 <em>supprimé</em> pour la comparaison du modèle et automatiquement
1219 <em>ajouté</em> une fois la substitution effectuée. Cette fonctionnalité
1220 est nécessaire pour de nombreux cas de réécriture ; sans elle, vous
1221 seriez obligé de tenir compte du répertoire parent pour la comparaison,
1222 ce qui n'est pas toujours
1223 possible. Il y a une exception : si une chaîne de substitution commence
1224 par <code>http://</code>, le préfixe du répertoire ne sera
1225 <strong>pas</strong> ajouté, et une redirection externe (ou le passage
1226 par un mandataire, si le drapeau <strong>P</strong> est utilisé) sera
1227 initiée. Voir la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de détails.</p>
1229 <p>Le moteur de réécriture peut aussi être utilisé dans les sections
1230 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> avec les
1231 mêmes règles de comparaison des préfixes que celles qui s'appliquent
1232 pour les fichiers <code>.htaccess</code>. Cependant, il est en général
1233 plus simple, pour éviter la complication des substitutions de préfixes,
1234 de définir les règles de réécriture dans le contexte du serveur
1235 principal ou des hôtes virtuels, plutôt que dans une section
1236 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>.</p>
1238 <p>Bien que du point de vue syntaxique, il soit permis de définir des
1239 règles de réécriture dans les sections <code class="directive"><a href="../mod/core.html#location"><Location></a></code> et <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, ce n'est à priori
1240 d'aucune utilité et n'est pas supporté.</p>
1244 <p>Voici toutes les combinaisons de substitution et leurs
1245 significations :</p>
1247 <p><strong>Dans la configuration au niveau du serveur principal
1248 (<code>httpd.conf</code>)<br />
1249 pour la requête ``<code>GET
1250 /chemin/infochemin</code>'':</strong><br />
1253 <table class="bordered">
1256 <th>Résultat de la substitution</th>
1260 <td>^/un_chemin(.*) autre_chemin$1</td>
1261 <td>invalide, non supporté</td>
1265 <td>^/un_chemin(.*) autre_chemin$1 [R]</td>
1266 <td>invalide, non supporté</td>
1270 <td>^/un_chemin(.*) autre_chemin$1 [P]</td>
1271 <td>invalide, non supporté</td>
1275 <td>^/un_chemin(.*) /autre_chemin$1</td>
1276 <td>/autre_chemin/info_chemin</td>
1280 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1281 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1285 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1286 <td>sans objet, non supporté</td>
1290 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1291 <td>/autre_chemin/info_chemin</td>
1295 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1296 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1300 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1301 <td>sans objet, non supporté</td>
1305 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1306 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1310 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1311 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1316 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1317 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1321 <p><strong>Dans une configuration de niveau répertoire pour
1322 <code>/chemin</code><br />
1323 (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1324 <code>RewriteBase /chemin</code>)<br />
1325 pour la requête ``<code>GET
1326 /chemin/chemin-local/infochemin</code>'':</strong><br />
1329 <table class="bordered">
1333 <th>Résultat de la substitution</th>
1337 <td>^chemin-local(.*) autre-chemin$1</td>
1338 <td>/chemin/autre-chemin/infochemin</td>
1342 <td>^chemin-local(.*) autre-chemin$1 [R]</td>
1343 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1348 <td>^chemin-local(.*) autre-chemin$1 [P]</td>
1349 <td>n'a pas lieu d'être, non supporté</td>
1353 <td>^chemin-local(.*) /autre-chemin$1</td>
1354 <td>/autre-chemin/infochemin</td>
1358 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1359 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1363 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1364 <td>n'a pas lieu d'être, non supporté</td>
1368 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1369 <td>/autre-chemin/infochemin</td>
1373 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1374 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1378 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1379 <td>n'a pas lieu d'être, non supporté</td>
1383 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1384 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1388 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1389 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1390 (le drapeau [R] est redondant)</td>
1394 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1395 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1403 <div class="bottomlang">
1404 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> |
1405 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p>
1406 </div><div id="footer">
1407 <p class="apache">Copyright 2010 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
1408 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>