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
791 spécifiée. La valeur vide se comporte comme si la
792 clé était absente ; il est donc impossible de distinguer une
793 valeur vide d'une absence de clé.</p>
795 <p>Par exemple, vous pouvez définir une directive
796 <code class="directive">RewriteMap</code> comme suit </p>
798 <div class="example"><p><code>
799 RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt
802 <p>Vous pourrez ensuite utiliser cette table dans une
803 directive <code class="directive">RewriteRule</code> comme suit :</p>
805 <div class="example"><p><code>
806 RewriteRule ^/ex/(.*) ${map-exemple:$1}
809 <p>Les combinaisons suivantes pour <em>type de correspondance</em>
810 et <em>source de la correspondance</em>
811 peuvent être utilisées :</p>
815 <dd>Un fichier texte contenant des paires clé-valeur séparées
816 par des espaces, une paire par ligne (<a href="../rewrite/rewritemap.html#txt">Détails ...</a>).</dd>
819 <dd>Sélection aléatoire d'une entrée depuis un fichier texte (<a href="../rewrite/rewritemap.html#rnd">Détails ...</a>).</dd>
822 <dd>Recherche une entrée dans un fichier dbm contenant des
823 paires nom-valeur. Le condensé hash est élaboré à partir d'un
824 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>
827 <dd>Une des quatre fonctions internes disponibles que fournit
828 <code>RewriteMap</code>: toupper, tolower, escape ou unescape
829 (<a href="../rewrite/rewritemap.html#int">Détails ...</a>).</dd>
832 <dd>Appelle un programme externe ou un script pour effectuer la
833 réécriture (<a href="../rewrite/rewritemap.html#int">Détails
836 <dt>dbd or fastdbd</dt>
837 <dd>Une commande SQL SELECT à exécuter pour rechercher la cible
838 de réécriture (<a href="../rewrite/rewritemap.html#int">Détails
842 <p>Vous trouverez plus de détails et de nombreux exemples dans le <a href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
846 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
847 <div class="directive-section"><h2><a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions" id="rewriteoptions">Directive</a></h2>
848 <table class="directive">
849 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options spéciales
850 pour le moteur de réécriture</td></tr>
851 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
852 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
853 <tr><th><a href="directive-dict.html#Override">Annuler:</a></th><td>FileInfo</td></tr>
854 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
855 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
856 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td><code>MaxRedirects</code> n'est plus disponible depuis
857 la version version 2.1</td></tr>
860 <p>La directive <code class="directive">RewriteOptions</code> définit
861 certaines options spéciales pour la configuration au niveau du
862 serveur ou du répertoire. La chaîne de caractères <em>Option</em>
863 ne peut actuellement prendre qu'une des valeurs suivantes :</p>
866 <dt><code>Inherit</code></dt>
869 <p>Ceci force la configuration locale à hériter de la
870 configuration du niveau supérieur. Dans le contexte des hôtes
871 virtuels, cela signifie que les correspondances, conditions et
872 règles du serveur principal sont héritées. Dans le contexte des
873 répertoires, cela signifie que les conditions et règles de la
874 configuration <code>.htaccess</code> ou les sections <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du répertoire
875 parent sont héritées. Les règles héritées sont virtuellement
876 copiées dans la section où cette directive est utilisée. Si elles
877 sont utilisées avec des règles locales, les règles héritées sont
878 placées après ces dernières. La place de cette directive - avant
879 ou après les règles locales - n'a aucune influence sur ce
880 comportement. Si des règles locales ont forcé l'arrêt de la
881 réécriture, les règles héritées ne seront pas traitées.</p>
883 <div class="warning">
884 Les règles héritées du niveau parent sont appliquées
885 <strong>after</strong> après les règles spécifiées dans le niveau
890 <dt><code>InheritBefore</code></dt>
892 <p>Même effet que l'option <code>Inherit</code> ci-dessus, mais
893 les règles spécifiées dans le niveau parent s'appliquent
894 <strong>avant</strong> les règles spécifiées dans le niveau
895 enfant. Disponible depuis la version 2.3.10 du serveur HTTP
902 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
903 <div class="directive-section"><h2><a name="RewriteRule" id="RewriteRule">RewriteRule</a> <a name="rewriterule" id="rewriterule">Directive</a></h2>
904 <table class="directive">
905 <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>
906 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
907 <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
908 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
909 <tr><th><a href="directive-dict.html#Override">Annuler:</a></th><td>FileInfo</td></tr>
910 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
911 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
913 <p>La directive <code class="directive">RewriteRule</code> est le
914 véritable cheval de trait de la réécriture. La directive peut
915 apparaître plusieurs fois, chaque instance définissant une
916 règle de réécriture particulière. L'ordre dans lequel ces règles
917 sont définies est important - il s'agit de l'ordre dans lequel
918 les règles seront appliquées au cours du processus de
921 <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
922 <a id="regexp" name="regexp">expression rationnelle</a>
923 compatible perl. Dans la première règle de réécriture,
924 l'expression est comparée au (%-encoded)
925 <a href="./directive-dict.html#Syntax">chemin de l'URL</a> de la
926 requête ; les expressions suivantes sont comparées à la sortie de
927 la dernière règle de réécriture qui a été appliquée.</p>
929 <div class="note"><h3>Qu'est-ce qui est comparé ?</h3>
930 <p>Le <em>Modèle</em> est d'abord comparé à la partie
931 de l'URL après le nom d'hôte et le port, et avant la chaîne de
934 <p>Dans un contexte de répertoire, <em>Modèle</em> est comparé à
935 ce qui reste de l'URL après suppression du préfixe qui a conduit
936 Apache httpd à la règle courante (voir la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code>). Le préfixe supprimé
937 se termine toujours par un slash, ce qui signifie que la
938 correspondance se fera toujours avec une chaîne qui ne commence
939 pas par un slash. Un <em>Modèle</em> contenant <code>^/</code> ne
940 correspondra jamais dans un contexte de répertoire.</p>
943 <p>Si vous souhaitez faire une comparaison sur le nom
944 d'hôte, le port, ou la chaîne de requête, utilisez une
945 directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
946 comportant respectivement les variables
947 <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
948 <code>%{QUERY_STRING}</code>. Si vous désirez effectuer une
949 correspondance avec l'ensemble du chemin de l'URL dans un contexte
950 de répertoire (htaccess), utilisez la variable
951 <code>%{REQUEST_URI}</code>.</p>
954 <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
955 document <a href="../rewrite/intro.html#regex">Introduction à
958 <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON
959 ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
960 d'inverser la signification d'un modèle, soit pour dire
961 ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
962 ce modèle</em>''. Le caractère NON peut donc être utilisé à
963 titre exceptionnel, lorsqu'il est plus simple d'effectuer une
964 comparaison avec le modèle inversé, ou dans la dernière règle
967 <div class="note"><h3>Note</h3>
968 Si vous utilisez le caractère NON pour inverser la signification d'un
969 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
970 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
971 pas (autrement dit, sa négation correspond), les groupes sont vides.
972 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
973 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
977 <p>Dans une règle de réécriture,
978 <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
979 de caractères qui remplace le chemin de l'URL original qui
980 correspondait au <em>Modèle</em>. <em>Substitution</em> peut
985 <dt>un chemin du système de fichiers</dt>
987 <dd>Il indique alors la localisation dans le système de
988 fichiers de la ressource qui doit être envoyée au client.</dd>
990 <dt>chemin d'URL</dt>
992 <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
993 doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
994 essaie de deviner si vous avez spécifié un chemin du système
995 de fichiers ou un chemin d'URL en vérifiant si la première
996 partie du chemin existe à la racine du système de fichiers.
997 Par exemple, si vous avez spécifié comme chaîne de
998 <em>Substitution</em> <code>/www/file.html</code>, cette
999 dernière sera traitée comme un chemin d'URL <em>à moins</em>
1000 qu'un répertoire nommé <code>www</code> n'existe à la racine
1001 de votre système de fichiers, auquel cas la chaîne de
1002 substitution sera traitée comme un chemin du système de
1003 fichiers. Si vous désirez que d'autres directives de
1004 correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au
1005 chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
1006 comme décrit ci-dessous.</dd>
1008 <dt>URL absolue</dt>
1010 <dd>Si une URL absolue est spécifiée,
1011 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte
1012 correspond à celui de l'hôte local. Si c'est le cas, le
1013 protocole et le nom d'hôte sont supprimés, et ce qui reste est
1014 traité comme un chemin d'URL. Dans le cas contraire, une
1015 redirection externe vers l'URL indiquée est effectuée. Pour
1016 forcer une redirection externe vers l'hôte local, voir le
1017 drapeau <code>[R]</code> ci-dessous.</dd>
1019 <dt><code>-</code> (tiret)</dt>
1021 <dd>Un tiret indique qu'aucune substitution ne doit être
1022 effectuée (le chemin considéré est transmis sans changement).
1023 Ceci est utile quand un drapeau doit être appliqué sans
1024 modifier le chemin (voir ci-dessous).</dd>
1028 <p>En plus du texte, la chaîne <em>Substition</em> peut
1032 <li>des références arrières (<code>$N</code>) vers le modèle
1033 d'une directive RewriteRule</li>
1035 <li>des références arrières (<code>%N</code>) vers le dernier
1036 modèle d'une directive RewriteCond qui correspondait</li>
1038 <li>des variables du serveur comme dans les chaînes de test de
1039 condition d'une règle (<code>%{VARNAME}</code>)</li>
1042 <a href="#mapfunc">fonctions de comparaison</a>
1043 (<code>${nom correspondance:clé|défaut}</code>)</li>
1046 <p>Les références arrières sont des identificateurs de la forme
1047 <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1048 seront remplacés par le contenu du <strong>N</strong>ème groupe
1049 du <em>Modèle</em> qui correspondait. Les variables du serveur
1050 sont les mêmes que dans la <em>Chaîne de test</em> d'une
1051 directive <code>RewriteCond</code>. Les fonctions de comparaison
1052 sont issues de la directive <code>RewriteMap</code> dans la
1053 section de laquelle elles sont décrites. Ces trois types de
1054 variables sont évaluées dans l'ordre ci-dessus.</p>
1056 <p>Comme mentionné précédemment, toutes les règles de
1057 réécriture sont appliquées à la chaîne de <em>Substitution</em>
1058 (selon l'ordre dans lequel elles sont définies dans le fichier
1059 de configuration). L'URL est <strong>intégralement
1060 remplacée</strong> par la chaîne de <em>Substitution</em> et le
1061 processus de réécriture se poursuit jusqu'à ce que toutes les
1062 règles aient été appliquées, ou qu'il soit explicitement stoppé
1063 par un drapeau <code><strong>L</strong></code>.</p>
1065 <div class="note"><h3>Modifier la chaîne de requête</h3>
1066 <p>Par défaut, la chaîne de requête est transmise sans
1067 modification. Vous pouvez cependant créer dans la chaîne de
1068 substitution des URLs dont une partie constitue une chaîne de
1069 requête. Pour cela, ajoutez simplement un point d'interrogation
1070 dans la chaîne de substitution pour indiquer que le texte qui
1071 suit doit être réinjecté dans la chaîne de requête. Pour
1072 supprimer une chaîne de requête, terminez simplement la chaîne de
1073 substitution par un point d'interrogation. Pour combiner les
1074 nouvelles chaînes de requête avec les anciennes, utilisez le
1075 drapeau <code>[QSA]</code>.</p>
1079 <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1081 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1082 comme troisième argument de la directive
1083 <code>RewriteRule</code>. Séparés par des virgules au sein d'une
1084 liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1085 être choisis dans la table suivante. Vous trouverez plus de
1086 détails, et des exemples pour chaque drapeau dans le <a href="../rewrite/flags.html">document à propos des drapeaux de
1089 <table class="bordered">
1090 <tr><th>Drapeaux et syntaxe</th>
1095 <td>Echappe les caractères non-alphanumériques <em>avant</em>
1096 d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1100 <td>La règle est chaînée avec la règle suivante. Si la règle
1101 échoue, la ou les règles avec lesquelles elle est est chaînée
1102 seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1105 <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1106 <td>Définit un cookie au niveau du navigateur client. La syntaxe
1108 CO=<em>NAME</em>:<em>VAL</em>[:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>[:<em>secure</em>[:<em>httponly</em>]]]]]
1109 <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1113 <td>discardpathinfo|DPI</td>
1114 <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails
1118 <td>env|E=<em>VAR</em>[:<em>VAL</em>]</td>
1119 <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1120 <em>VAL</em> si elle est fournie). <em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1123 <td>forbidden|F</td>
1124 <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1125 <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1129 <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1132 <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1133 <td>L'URI résultant est envoyé au <em>Gestionnaire de
1134 contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1138 <td>Arrête le processus de réécriture immédiatement et n'applique
1139 plus aucune règle. Prêtez une attention particulière aux mises
1140 en garde concernant les contextes de niveau répertoire et
1141 .htaccess (voir aussi le drapeau END). <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1145 <td>Réexécute le processus de réécriture à partir de la première
1146 règle, en utilisant le résultat du jeu de règles, sous réserve
1147 qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails
1152 <td>Rend la comparaison entre modèles insensible à la casse.
1153 <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1156 <td>noescape|NE</td>
1157 <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1158 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>
1161 <td>nosubreq|NS</td>
1162 <td>La règle est sautée si la requête courante est une
1163 sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1167 <td>Force l'envoi en interne de l'URL de substitution en tant
1168 que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails
1172 <td>passthrough|PT</td>
1173 <td>L'URI résultant est repassé au moteur de mise en
1174 correspondance des URLs pour y être traité par d'autres
1175 traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1176 <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1179 <td>qsappend|QSA</td>
1180 <td>Ajoute toute chaîne de paramètres créée dans la cible de
1181 réécriture à toute chaîne de paramètres présente dans l'URL de la
1182 requête originale. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1185 <td>qsdiscard|QSD</td>
1186 <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails
1190 <td>redirect|R[=<em>code</em>]</td>
1191 <td>Force une redirection externe, avec un code de statut HTTP
1192 optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em>
1197 <td>Arrête le processus de réécriture immédiatement et
1198 n'applique plus aucune règle. Empêche aussi l'exécution
1199 ultérieure de règles de réécriture dans des contextes de
1200 répertoire et des fichiers .htaccess (disponible depuis la
1201 version 2.3.9) <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1204 <td>skip|S=<em>nombre</em></td>
1205 <td>Si la règle courante s'applique, le moteur de réécriture
1206 doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1209 <td>tyle|T=<em>Type-MIME</em></td>
1210 <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
1211 spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1215 <div class="note"><h3>Développement du répertoire home</h3>
1216 <p> Quand la chaîne de substitution commence par quelque chose comme
1217 "/~user" (de manière explicite ou par références arrières), mod_rewrite
1218 développe le répertoire home sans tenir compte de la présence ou de la
1219 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
1221 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1222 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
1225 <div class="note"><h3>Réécritures dans le contexte de répertoire</h3>
1227 <p>Le moteur de réécriture peut être utilisé dans les fichiers <a href="../howto/htaccess.html">.htaccess</a>. Pour activer le moteur de
1228 réécriture pour ces fichiers, vous devez préciser "<code>RewriteEngine
1229 On</code>" <strong>et</strong> "<code>Options FollowSymLinks</code>"
1230 doit être activé. Si votre administrateur a interdit la surcharge de
1231 <code>FollowSymLinks</code> pour un répertoire utilisateur, vous ne
1232 pouvez pas utiliser le moteur de réécriture. Cette restriction est
1233 nécessaire pour des raisons de sécurité.</p>
1235 <p>Lorsqu'on utilise le moteur de réécriture dans les fichiers
1236 <code>.htaccess</code>, le préfixe du répertoire (qui est
1237 toujours le même pour un répertoire donné) est automatiquement
1238 <em>supprimé</em> pour la comparaison du modèle et automatiquement
1239 <em>ajouté</em> une fois la substitution effectuée. Cette fonctionnalité
1240 est nécessaire pour de nombreux cas de réécriture ; sans elle, vous
1241 seriez obligé de tenir compte du répertoire parent pour la comparaison,
1242 ce qui n'est pas toujours
1243 possible. Il y a une exception : si une chaîne de substitution commence
1244 par <code>http://</code>, le préfixe du répertoire ne sera
1245 <strong>pas</strong> ajouté, et une redirection externe (ou le passage
1246 par un mandataire, si le drapeau <strong>P</strong> est utilisé) sera
1247 initiée. Voir la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de détails.</p>
1249 <p>Le moteur de réécriture peut aussi être utilisé dans les sections
1250 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> avec les
1251 mêmes règles de comparaison des préfixes que celles qui s'appliquent
1252 pour les fichiers <code>.htaccess</code>. Cependant, il est en général
1253 plus simple, pour éviter la complication des substitutions de préfixes,
1254 de définir les règles de réécriture dans le contexte du serveur
1255 principal ou des hôtes virtuels, plutôt que dans une section
1256 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>.</p>
1258 <p>Bien que du point de vue syntaxique, il soit permis de définir des
1259 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
1260 d'aucune utilité et n'est pas supporté.</p>
1264 <p>Voici toutes les combinaisons de substitution et leurs
1265 significations :</p>
1267 <p><strong>Dans la configuration au niveau du serveur principal
1268 (<code>httpd.conf</code>)<br />
1269 pour la requête ``<code>GET
1270 /chemin/infochemin</code>'':</strong><br />
1273 <table class="bordered">
1276 <th>Résultat de la substitution</th>
1280 <td>^/un_chemin(.*) autre_chemin$1</td>
1281 <td>invalide, non supporté</td>
1285 <td>^/un_chemin(.*) autre_chemin$1 [R]</td>
1286 <td>invalide, non supporté</td>
1290 <td>^/un_chemin(.*) autre_chemin$1 [P]</td>
1291 <td>invalide, non supporté</td>
1295 <td>^/un_chemin(.*) /autre_chemin$1</td>
1296 <td>/autre_chemin/info_chemin</td>
1300 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1301 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1305 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1306 <td>sans objet, non supporté</td>
1310 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1311 <td>/autre_chemin/info_chemin</td>
1315 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1316 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1320 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1321 <td>sans objet, non supporté</td>
1325 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1326 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1330 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1331 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1336 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1337 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1341 <p><strong>Dans une configuration de niveau répertoire pour
1342 <code>/chemin</code><br />
1343 (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1344 <code>RewriteBase /chemin</code>)<br />
1345 pour la requête ``<code>GET
1346 /chemin/chemin-local/infochemin</code>'':</strong><br />
1349 <table class="bordered">
1353 <th>Résultat de la substitution</th>
1357 <td>^chemin-local(.*) autre-chemin$1</td>
1358 <td>/chemin/autre-chemin/infochemin</td>
1362 <td>^chemin-local(.*) autre-chemin$1 [R]</td>
1363 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1368 <td>^chemin-local(.*) autre-chemin$1 [P]</td>
1369 <td>n'a pas lieu d'être, non supporté</td>
1373 <td>^chemin-local(.*) /autre-chemin$1</td>
1374 <td>/autre-chemin/infochemin</td>
1378 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1379 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1383 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1384 <td>n'a pas lieu d'être, non supporté</td>
1388 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1389 <td>/autre-chemin/infochemin</td>
1393 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1394 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1398 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1399 <td>n'a pas lieu d'être, non supporté</td>
1403 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1404 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1408 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1409 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1410 (le drapeau [R] est redondant)</td>
1414 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1415 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1423 <div class="bottomlang">
1424 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> |
1425 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p>
1426 </div><div id="footer">
1427 <p class="apache">Copyright 2011 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
1428 <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>