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">AllowOverride:</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 dont le résultat est la substitution d'un
131 chemin relatif. Lorsque vous utilisez une directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code> dans un fichier
132 <code>.htaccess</code>, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> enlève le
133 préfixe de répertoire local avant d'effectuer le traitement, puis
134 réécrit ce qui reste de l'URL. Lorsque la réécriture est terminée,
135 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ajoute automatiquement le préfixe de
136 répertoire local (ou la valeur de la directive
137 <code class="directive">RewriteBase</code> si cette dernière est définie)
138 à la chaîne de substitution avant de la remettre à disposition du
139 serveur, comme s'il s'agissait de l'URL d'origine.</p>
141 <p>Cette directive est <em>requise</em> pour les réécritures
142 dans un contexte de répertoire défini via la directive
143 <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> lorsque la
144 substitution utilise un chemin relatif.</p>
146 <p>Si votre chemin URL n'existe pas réellement dans le système de
147 fichiers, ou ne trouve pas directement sous le répertoire défini
148 par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>, vous devez utiliser la
149 directive <code class="directive">RewriteBase</code> dans chaque fichier
150 <code>.htaccess</code> où vous voulez utiliser des directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code>.</p>
152 <p>L'exemple ci-dessous montre comment faire correspondre
153 http://example.com/mon-appli/index.html à
154 /home/www/exemple/nouveau_site.html dans un fichier
155 <code>.htaccess</code>. On suppose que le contenu disponible à
156 http://example.com/ se situe sur le disque à
157 /home/www/exemple/.</p>
159 <div class="example"><pre>
161 # Le chemin URL utilisé pour arriver dans ce contexte, et non le chemin
162 # du système de fichiers
163 RewriteBase /mon-appli/
164 RewriteRule ^index\.html$ nouveau_site.html
169 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
170 <div class="directive-section"><h2><a name="RewriteCond" id="RewriteCond">RewriteCond</a> <a name="rewritecond" id="rewritecond">Directive</a></h2>
171 <table class="directive">
172 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une condition qui devra être satisfaite pour que
173 la réécriture soit effectuée
175 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code> RewriteCond
176 <em>chaîne de test</em> <em>expression de comparaison</em></code></td></tr>
177 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
178 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
179 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
180 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
182 <p>La directive <code class="directive">RewriteCond</code> permet de définir une
183 condition d'exécution d'une règle. Une ou plusieurs conditions
184 <code class="directive">RewriteCond</code> peuvent précéder une
185 directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code>. La règle de réécriture correspondante n'est
186 ainsi exécutée que si ces conditions sont satisfaites,
187 <strong>et</strong> si l'URI correspond au modèle spécifié dans la
190 <p><em>TestString</em> est une chaîne qui peut contenir les
191 extensions suivantes en plus du texte simple :</p>
195 <strong>références arrières de règle de réécriture</strong> :
196 ce sont des références arrières de la forme
197 <strong><code>$N</code></strong> (0 <= N <= 9). $1 à $9
198 permettent d'accéder aux parties regroupées (entre
199 parenthèses) du modèle, issues de la <code>RewriteRule</code>
200 concernée par le jeu de conditions <code>RewriteCond</code>
201 courant. $0 donne accès à l'ensemble de la chaîne
202 correspondant au modèle.</li>
204 <strong>Références arrières de condition de réécriture
205 </strong> : ce sont des références arrières de la forme
206 <strong><code>%N</code></strong> (0 <= N <= 9). %1 à %9
207 permettent d'accéder aux parties regroupées (entre
208 parenthèses) du modèle, issues de la <code>RewriteRule</code>
209 concernée par le jeu de conditions <code>RewriteCond</code>
210 courant. %0 donne accès à l'ensemble de la chaîne
211 correspondant au modèle.</li>
213 <strong>extensions de table de réécriture</strong> :
214 ce sont des extensions de la forme <strong><code>${nomTable:clé|défaut}</code></strong>. Voir la <a>href="#mapfunc">documentation sur RewriteMap</a>
215 pour plus de détails.
218 <strong>Variables du serveur</strong> :
219 ce sont des variables de la forme
220 <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
221 où <em>NOM_DE_VARIABLE</em> peut contenir une chaîne issue
222 de la liste suivante :
227 <th>En-têtes HTTP :</th> <th>connexion & requête:</th> <th />
232 HTTP_USER_AGENT<br />
237 HTTP_PROXY_CONNECTION<br />
248 SCRIPT_FILENAME<br />
258 <th>variables internes au serveur :</th> <th>date et heure :</th> <th>spéciaux :</th>
268 SERVER_PROTOCOL<br />
269 SERVER_SOFTWARE<br />
287 REQUEST_FILENAME<br />
295 <p>Ces variables correspondent toutes aux en-têtes MIME
296 HTTP de mêmes noms, au variables C du serveur HTTP Apache, ou
297 aux champs <code>struct tm</code> du système Unix. La
298 plupart d'entre elles sont documentées ailleurs dans le
299 manuel ou dans la spécification CGI.</p>
301 <p>SERVER_NAME et SERVER_PORT dépendent respectivement
302 des valeurs des directives <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> et <code class="directive"><a href="../mod/core.html#usecanonicalphysicalport">UseCanonicalPhysicalPort</a></code>.</p>
304 <p>Parmi les variables
305 spécifiques à mod_rewrite, ou trouve les suivantes :</p>
308 <dt><code>IS_SUBREQ</code></dt>
310 <dd>Contient le texte "true" si la requête en cours
311 de traitement est une sous-requête, "false" dans le
312 cas contraire. Une sous-requête est générée quand un
313 module a besoin de se référer à des fichiers ou URIs
314 addidionnels pour pouvoir mener à bien sa tâche.</dd>
316 <dt><code>API_VERSION</code></dt>
318 <dd>C'est la version de l'API des modules Apache httpd
319 (l'interface interne entre le serveur et les modules)
320 pour la construction courante de httpd, telle qu'elle
321 est définie dans include/ap_mmn.h. La version de l'API
322 des modules correspond à la version du serveur Apache
324 utilisé (par exemple, pour la version 1.3.14 d'Apache
326 il s'agit de la version 19990320:10), mais intéresse
327 principalement les auteurs de modules.</dd>
329 <dt><code>THE_REQUEST</code></dt>
331 <dd>La ligne de requête HTTP complète envoyée par le
332 navigateur au serveur (par exemple, "<code>GET
333 /index.html HTTP/1.1</code>"), à l'exclusion de tout
334 en-tête ajouté par le navigateur. Cette
335 valeur n'a pas été déséchappée (décodée), à la
336 différence de la plupart des variables suivantes.</dd>
338 <dt><code>REQUEST_URI</code></dt>
340 <dd>La partie chemin de l'URI de la requête, comme
341 "/index.html". En particulier, ceci exclut la chaîne
342 de paramètres qui est quant à elle disponible via sa
343 propre variable <code>QUERY_STRING</code>.</dd>
345 <dt><code>REQUEST_FILENAME</code></dt>
347 <dd>Le chemin complet local au système de fichiers
348 du fichier ou du script correspondant
349 à la requête, s'il a déjà été déterminé par le serveur
350 au moment où on y fait référence. Dans le cas
351 contraire, et en particulier dans le cas d'un serveur
352 virtuel, <code>REQUEST_FILENAME</code> contient la
353 valeur de <code>REQUEST_URI</code>.</dd>
355 <dt><code>HTTPS</code></dt>
357 <dd>Contient le texte "on" si la connexion
358 utilise SSL/TLS, "off" dans le cas contraire
359 (Cette variable peut être utilisée sans problème, que
360 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non.</dd>
362 <dt><code>REQUEST_SCHEME</code></dt>
364 <dd>Contient le protocole de la requête (en général
365 "http" ou "https"). La valeur peut être modifiée par
366 la directive <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>.</dd>
373 <p>Si la <em>chaîne de test</em> contient la valeur spéciale
374 <code>expr</code>, <em>expression de comparaison</em> sera traité
375 en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>.</p>
377 <p>Autres points à connaître ::</p>
380 <p>Les variables <code>SCRIPT_FILENAME</code> et
381 <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
382 du champ <code>filename</code> de la
383 structure interne <code>request_rec</code>du serveur HTTP Apache.
384 Le premier nom correspond au nom de variable bien connu CGI,
385 alors que le second est l'équivalent de REQUEST_URI (qui
386 contient la valeur du champ <code>uri</code> de
387 <code>request_rec</code>).</p>
388 <p>Si une substitution intervient et si la réécriture se
389 poursuit, la valeur des deux variables sera mise à jour en
391 <p>Dans le contexte du serveur principal (c'est à dire avant que
392 la requête ne soit mise en correspondance avec le système de
393 fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
394 contenir le chemin entier dans le système de fichiers local car
395 ce chemin b'est pas connu à ce stade du traitement. Dans ce cas,
396 les deux variables contiendront la valeur de REQUEST_URI. Pour
397 obtenir le chemin complet de la requête dans le système de
398 fichiers local dans le contexte du serveur principal, utilisez une
399 référence avant à base d'URL
400 <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la valeur
401 finale de REQUEST_FILENAME.</p></li>
405 <code>%{ENV:<em>variable</em>}</code>, où <em>variable</em> peut
406 correspondre à une variable d'environnement quelconque.</li>
408 <code>%{ENV:variable}</code> est aussi disponible, où
409 <em>variable</em> peut correspondre à toute variable
410 d'environnement. Peut être consulté via des structures internes
411 d'Apache httpd et (si on ne les trouve pas ici) via la fonction
412 <code>getenv()</code> à partir du processus du serveur Apache
415 <li>Que <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non, on peut
416 utiliser <code>%{SSL:variable}</code>, où <em>variable</em>
417 peut être remplacé par le nom d'une
418 <a href="mod_ssl.html#envvars">variable
419 d'environnement SSL</a> . Si <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> n'est pas
420 chargé, cette variable contiendra toujours une chaîne vide.
421 Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
422 contenir la valeur <code>128</code>.</li>
425 On peut utiliser <code>%{HTTP:en-tête}</code>, où
426 <em>en-tête</em> peut correspondre à tout nom d'en-tête MIME
427 HTTP, pour extraire la valeur d'un en-tête envoyé dans la
428 requête HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
429 contiendra la valeur de l'en-tête HTTP
430 "<code>Proxy-Connection:</code>".
431 Si on utilise un en-tête HTTP
432 dans une condition, et si cette condition est évaluée à
433 <code>vrai</code> pour la requête, cet en-tête sera ajouté à l'en-tête Vary de
434 la réponse. Il ne le sera pas si la condition est évaluée à
435 <code>faux</code>. L'ajout de l'en-tête HTTP à l'en-tête Vary
436 est nécessaire à une mise en cache appropriée.
437 <p>Il faut garder à l'esprit que les conditions suivent une
438 logique de cout-circuit si le drapeau
439 '<strong><code>ornext|OR</code></strong>' est utilisé, et que de
440 ce fait, certaines d'entre elles ne seront pas évaluées.</p>
443 <li>A des fins de référence avant, on peut utiliser,
444 <code>%{LA-U:variable}</code>, qui
445 permet d'effectuer une sous-requête interne à base d'URL, afin
446 de déterminer la valeur finale de <em>variable</em>. Ceci permet
447 d'accéder à la valeur d'une variable pour la réécriture inconnue
448 à ce stade du traitement, mais qui sera définie au
449 cours d'une phase ultérieure.
450 <p>Par exemple, pour effectuer une réécriture dépendant de la
451 variable <code>REMOTE_USER</code> dans le contexte du serveur
452 principal (fichier <code>httpd.conf</code>), vous devez utiliser
453 <code>%{LA-U:REMOTE_USER}</code> - cette variable est définie
454 par la phase d'autorisation qui intervient <em>après</em> la
455 phase de traduction d'URL (pendant laquelle mod_rewrite opère).</p>
456 <p>Par contre, comme mod_rewrite implémente son contexte de
457 répertoire (fichier <code>.htaccess</code>) via la phase Fixup
458 de l'API, et comme la phase d'autorisation intervient
459 <em>avant</em> cette dernière, vous pouvez vous contenter
460 d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
463 <code>%{LA-F:variable}</code> peut être utilisée pour effectuer
464 une sous-requête interne (basée sur le nom de fichier), afin de
465 déterminer la valeur finale de <em>variable</em>. La plupart du
466 temps, elle est identique à LA-U (voir ci-dessus).</li>
470 <p><em>expression de comparaison</em> est une expression
471 rationnelle qui est appliquée à l'instance actuelle de
472 <em>chaîne de test</em>. <em>chaîne de test</em> est d'abord
473 évaluée, puis comparée à
474 l'<em>expression de comparaison</em>.</p>
476 <p><em>expression de comparaison</em> est en général une
477 <em>expression rationnelle compatible perl</em>, mais vous
478 disposez des syntaxes supplémentaires suivantes pour effectuer
479 d'autres tests utiles sur <em>chaîne de test</em> :
483 <li>Vous pouvez préfixer l'expression avec un caractère
484 '<code>!</code>' (point d'exclamation) pour indiquer une
485 expression de <strong>non</strong>-correspondance.</li>
487 <li>Vous pouvez effectuer des comparaisons lexicographiques de
491 <li>'<strong><expression</strong>' (inférieur au sens
492 lexicographique)<br />
493 Traite l'<em>expression</em> comme une chaîne de
494 caractères et la compare lexicographiquement à
495 <em>chaîne de test</em>. La condition est satisfaite si
496 <em>chaîne de test</em> est inférieure au sens
497 lexicographique à l'<em>expression</em>.</li>
499 <li>'<strong>>expression</strong>' (supérieur au sens
500 lexicographique)<br />
501 Traite l'<em>expression</em> comme une chaîne de
502 caractères et la compare lexicographiquement à
503 <em>chaîne de test</em>. La condition est satisfaite si
504 <em>chaîne de test</em> est supérieure au sens
505 lexicographique à l'<em>expression</em>.</li>
507 <li>'<strong>=expression</strong>' (égal au sens
508 lexicographique)<br />
509 Traite l'<em>expression</em> comme une chaîne de
510 caractères et la compare lexicographiquement à
511 <em>chaîne de test</em>. La condition est satisfaite si
512 <em>chaîne de test</em> est égale au sens
513 lexicographique à l'<em>expression</em> (les deux chaînes
514 sont exactement identiques, caractère pour caractère). Si
515 <em>expression</em> est <code>""</code> (deux guillemets),
516 <em>chaîne de test</em> est comparée à la chaîne vide.</li>
518 <li>'<strong><=expression de comparaison</strong>' (inférieur ou égal à
519 au sens lexicographique)<br />
520 Considère l'<em>expression de comparaison</em> comme une
521 chaîne de caractères et la compare au sens lexicographique à
522 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
523 précède lexicographiquement <em>expression de comparaison</em>, ou est
524 égale à <em>expression de comparaison</em> (les deux chaînes
525 sont identiques, caractère pour caractère).</li>
527 <li>'<strong>>=expression de comparaison</strong>'
528 (supérieur ou égal à au sens lexicographique)<br />
529 Considère l'<em>expression de comparaison</em> comme une
530 chaîne de caractères et la compare au sens lexicographique à
531 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
532 suit lexicographiquement <em>expression de comparaison</em>, ou est
533 égale à <em>expression de comparaison</em> (les deux chaînes
534 sont identiques, caractère pour caractère).</li>
538 Vous pouvez effectuer des comparaisons d'entiers :
541 <li>'<strong>-eq</strong>' (est numériquement égal à)<br />
542 La <em>chaîne de test</em> est considérée comme un entier,
543 et est comparée numériquement à l'<em>expression de
544 comparaison</em>. Vrai si les deux expressions sont
545 numériquement égales.</li>
547 <li>'<strong>-ge</strong>' (est numériquement supérieur ou
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 supérieure ou égale à <em>expression de comparaison</em>.</li>
555 <li>'<strong>-gt</strong>' (est numériquement supérieur à)<br />
556 La <em>chaîne de test</em> est considérée comme un entier,
557 et est comparée numériquement à l'<em>expression de
558 comparaison</em>. Vrai si <em>chaîne de test</em> est
560 supérieure à <em>expression de comparaison</em>.</li>
562 <li>'<strong>-le</strong>' (est numériquement inférieur ou
564 La <em>chaîne de test</em> est considérée comme un entier,
565 et est comparée numériquement à l'<em>expression de
566 comparaison</em>. Vrai si <em>chaîne de test</em> est
568 inférieure ou égale à <em>expression de comparaison</em>.
569 Attention à la confusion avec le drapeau <strong>-l</strong>
570 en utilisant la variante the <strong>-L</strong> ou
571 <strong>-h</strong>.</li>
573 <li>'<strong>-lt</strong>' (est numériquement inférieur à)<br />
574 La <em>chaîne de test</em> est considérée comme un entier,
575 et est comparée numériquement à l'<em>expression de
576 comparaison</em>. Vrai si <em>chaîne de test</em> est
578 inférieure à <em>expression de comparaison</em>.
579 Attention à la confusion avec le drapeau <strong>-l</strong>
580 en utilisant la variante the <strong>-L</strong> ou
581 <strong>-h</strong>.</li>
586 <li>Vous pouvez effectuer différents tests sur les attributs de
590 <li>'<strong>-d</strong>' (est un répertoire -
591 <strong>d</strong>irectory)<br />
592 Traite <em>chaîne de test</em> comme un chemin et vérifie
593 s'il existe ou pas, et s'il s'agit d'un répertoire.</li>
595 <li>'<strong>-f</strong>' (est un
596 <strong>f</strong>ichier régulier)<br />
597 Traite <em>chaîne de test</em> comme un chemin et vérifie
598 s'il existe ou pas, et s'il s'agit d'un fichier régulier.</li>
600 <li>'<strong>-F</strong>' (test de l'existence d'un fichier
601 via une sous-requête)<br />
602 Vérifie si <em>chaîne de test</em> est un fichier valide,
603 accessible à travers tous les contrôles d'accès du serveur
604 actuellement configurés pour ce chemin. C'est une
605 sous-requête interne qui effectue cette vérification - à
606 utiliser avec précautions car les performances du serveur
607 peuvent s'en trouver affectées !</li>
609 <li>'<strong>-H</strong>' (est un lien symbolique, selon la
610 convention bash)<br />
611 Voir <strong>-l</strong>.</li>
613 <li>'<strong>-l</strong>' (est un lien symbolique)<br />
614 Considère la <em>chaîne de test</em> comme un chemin et
615 vérifie son existence et si elle est un lien symbolique. On
616 peut aussi utiliser la convention bash <strong>-L</strong>
617 ou <strong>-h</strong> lorsqu'il y a risque de confusion
618 avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</li>
620 <li>'<strong>-L</strong>' (est un lien symbolique, selon la
621 convention bash)<br />
622 Voir <strong>-l</strong>.</li>
624 <li>'<strong>-s</strong>' (est un fichier régulier d'une
625 certaine taille)<br />
626 Considère la <em>chaîne de test</em> comme un chemin et
627 vérifie son existence et si elle est un fichier régulier
628 d'une taille supérieure à zéro.</li>
630 <li>'<strong>-U</strong>' (test de l'existence d'une
631 <strong>U</strong>RL via une sous-requête)<br />
632 Vérifie si <em>chaîne de test</em> est une URL valide,
633 accessible à travers tous les contrôles d'accès du serveur
634 actuellement configurés pour ce chemin. C'est une
635 sous-requête interne qui effectue cette vérification - à
636 utiliser avec précautions car les performances du serveur
637 peuvent s'en trouver affectées !</li>
639 <li>'<strong>-x</strong>' (a l'attribut d'exécution positionné)<br />
640 Considère la <em>chaîne de test</em> comme un chemin et
641 vérifie son existence et si elle a son attribut d'exécution
642 positionné. Ce positionnement est déterminé en fonction de
643 l'OS sous-jacent.</li>
647 <div class="note"><h3>Note :</h3>
648 Tous ces tests peuvent aussi être préfixés par un point
649 d'exclamation ('!') pour inverser leur signification.
654 <p>Si la <em>chaîne de test</em> contient la valeur spéciale
655 <code>expr</code>, la <em>chaîne de comparaison</em> sera
656 traitée en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>.</p>
659 Dans l'exemple ci-dessous, on utilise <code>-strmatch</code>
660 pour comparer le <code>REFERER</code> avec le nom d'hôte du
661 site afin de bloquer le hotlinking (référencement direct)
665 <div class="example"><p><code>
666 RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"<br />
667 RewriteRule ^/images - [F]
671 <li>Vous pouvez aussi définir certains drapeaux pour
672 l'<em>expression de comparaison</em> en ajoutant ces
673 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
674 comme troisième argument de la directive
675 <code>RewriteCond</code>, où <em>drapeaux</em> est un
676 sous-ensemble séparé par des virgules des drapeaux suivants :
679 <li>'<strong><code>nocase|NC</code></strong>'
680 (<strong>n</strong>o <strong>c</strong>ase)<br />
681 Rend le test insensible à la casse - il n'est pas fait de
682 distinction entre majuscules et minuscules, à la fois dans le
683 développement de <em>chaîne de test</em> et dans
684 <em>expression de comparaison</em>. Ce drapeau n'est pris en
685 compte que lors d'une comparaison entre <em>chaîne de test</em>
686 et <em>expression de comparaison</em>. Il ne l'est pas pour les
687 vérification par sous-requêtes ou sur le système de
691 '<strong><code>ornext|OR</code></strong>'
692 (<strong>ou</strong> condition suivante)<br />
693 Permet de chaîner les conditions de règles avec un OU au
694 lieu du AND implicite. Exemple typique :
696 <div class="example"><pre>
697 RewriteCond %{REMOTE_HOST} ^host1 [OR]
698 RewriteCond %{REMOTE_HOST} ^host2 [OR]
699 RewriteCond %{REMOTE_HOST} ^host3
700 RewriteRule ...règles concernant tous ces hôtes...
703 Sans ce drapeau, les paires
704 condition/règle devraient être écrites trois fois.
707 <li>'<strong><code>novary|NV</code></strong>'
708 (<strong>n</strong>o <strong>v</strong>ary)<br />
709 Si la condition contient un en-tête HTTP, ce drapeau empêche
710 ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br />
711 L'utilisation de ce drapeau peut provoquer une mise en cache
712 incorrecte de la réponse, si la représentation de cette réponse
713 varie avec la valeur de l'en-tête considéré. Ce drapeau ne
714 devrait donc être utilisé que si l'on maîtrise parfaitement le
715 fonctionnement de l'en-tête Vary.
721 <p><strong>Exemple :</strong></p>
723 <p>Pour réécrire la page d'accueil d'un site en fonction de
724 l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
725 pouvez utiliser ce qui suit : </p>
727 <div class="example"><pre>
728 RewriteCond %{HTTP_USER_AGENT} ^Mozilla
729 RewriteRule ^/$ /homepage.max.html [L]
731 RewriteCond %{HTTP_USER_AGENT} ^Lynx
732 RewriteRule ^/$ /homepage.min.html [L]
734 RewriteRule ^/$ /homepage.std.html [L]
737 <p>Explications : si vous utilisez un navigateur
738 (Netscape Navigator, Mozilla etc) qui s'identifie comme
739 'Mozilla', vous accèderez à la page d'accueil max (qui
740 peut contenir des frames, ou d'autres ressources
742 Si vous utilisez le navigateur Lynx (qui est un navigateur
743 en mode texte), vous accèderez à une page d'accueil min
744 (qui peut être une version conçue pour une navigation simple
746 Si aucune de ces conditions n'est satisfaite (vous utilisez tout
747 autre navigateur, ou votre navigateur s'identifie de manière non
748 standard), vous accèderez à la page d'accueil std
753 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
754 <div class="directive-section"><h2><a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a> <a name="rewriteengine" id="rewriteengine">Directive</a></h2>
755 <table class="directive">
756 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active ou désactive l'exécution du
757 moteur de réécriture</td></tr>
758 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteEngine on|off</code></td></tr>
759 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>RewriteEngine off</code></td></tr>
760 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
761 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
762 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
763 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
766 <p>La directive <code class="directive">RewriteEngine</code> active ou
767 désactive l'exécution du moteur de réécriture. Si sa valeur est
768 <code>off</code>, ce module n'exécutera aucun traitement et ne
769 mettra pas à jour les variables d'environnement
770 <code>SCRIPT_URx</code>.</p>
772 <p>Pour désactiver le module, il vaut mieux utiliser cette
773 directive que commenter toutes les directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code> !</p>
775 <p>Notez que les hôtes virtuels n'héritent pas des
776 configurations de réécriture. Ceci implique que vous devez
777 insérer une directive <code>RewriteEngine on</code> dans chaque
778 hôte virtuel pour lequel vous souhaitez utiliser des règles
781 <p>Les directives <code class="directive">RewriteMap</code> du type
782 <code>prg</code> ne sont pas prises en compte au cours de
783 l'initialisation du serveur si elle ont été définies dans un
784 contexte où la directive <code class="directive">RewriteEngine</code> n'a
785 pas été définie à <code>on</code>.</p>
789 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
790 <div class="directive-section"><h2><a name="RewriteMap" id="RewriteMap">RewriteMap</a> <a name="rewritemap" id="rewritemap">Directive</a></h2>
791 <table class="directive">
792 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une fonction de mise en correspondance pour la
793 recherche de mots-clés</td></tr>
794 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteMap <em>nom de la correspondance</em> <em>type de
795 correspondance</em>:<em>source de la correspondance</em>
797 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
798 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
799 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
800 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Il est possible de choisir entre plusieurs types de
801 bases de données depuis la version 2.0.41 du serveur HTTP Apache</td></tr>
803 <p>La directive <code class="directive">RewriteMap</code> définit une
804 <em>Table de correspondance pour la réécriture</em> que les
805 fonctions de mise en correspondance
806 peuvent utiliser dans les chaînes de substitution des règles
807 pour insérer/substituer des champs en recherchant des mots-clés.
808 La source utilisée pour cette recherche peut être de plusieurs
811 <p><a id="mapfunc" name="mapfunc"><em>nom de la
812 correspondance</em></a> est le nom de la table de correspondance
813 et servira à spécifier une fonction de mise en correspondance
814 pour les chaînes de substitution d'une règle de réécriture selon
815 une des constructions suivantes :</p>
818 <strong><code>${</code> <em>nom de la
819 correspondance</em> <code>:</code>
820 <em>mot-clé</em> <code>}</code><br />
821 <code>${</code> <em>nom de la
822 correspondance</em> <code>:</code>
823 <em>mot-clé</em> <code>|</code> <em>valeur par défaut</em>
824 <code>}</code></strong>
827 <p>Lorsqu'une telle construction est rencontrée, la table de
828 correspondance <em>Nom de la correspondance</em> est consultée
829 et la clé <em>mot-clé</em> recherchée. Si la clé est trouvée, la
830 construction est remplacée par
831 la <em>valeur de remplacement</em>. Si la clé n'est pas trouvée,
832 elle est remplacée par la <em>valeur par défaut</em>, ou par une
833 chaîne vide si aucune <em>valeur par défaut</em> n'est
834 spécifiée. La valeur vide se comporte comme si la
835 clé était absente ; il est donc impossible de distinguer une
836 valeur vide d'une absence de clé.</p>
838 <p>Par exemple, vous pouvez définir une directive
839 <code class="directive">RewriteMap</code> comme suit </p>
841 <div class="example"><p><code>
842 RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt
845 <p>Vous pourrez ensuite utiliser cette table dans une
846 directive <code class="directive">RewriteRule</code> comme suit :</p>
848 <div class="example"><p><code>
849 RewriteRule ^/ex/(.*) ${map-exemple:$1}
852 <p>Les combinaisons suivantes pour <em>type de correspondance</em>
853 et <em>source de la correspondance</em>
854 peuvent être utilisées :</p>
858 <dd>Un fichier texte contenant des paires clé-valeur séparées
859 par des espaces, une paire par ligne (<a href="../rewrite/rewritemap.html#txt">Détails ...</a>).</dd>
862 <dd>Sélection aléatoire d'une entrée depuis un fichier texte (<a href="../rewrite/rewritemap.html#rnd">Détails ...</a>).</dd>
865 <dd>Recherche une entrée dans un fichier dbm contenant des
866 paires nom-valeur. Le condensé hash est élaboré à partir d'un
867 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>
870 <dd>Une des quatre fonctions internes disponibles que fournit
871 <code>RewriteMap</code>: toupper, tolower, escape ou unescape
872 (<a href="../rewrite/rewritemap.html#int">Détails ...</a>).</dd>
875 <dd>Appelle un programme externe ou un script pour effectuer la
876 réécriture (<a href="../rewrite/rewritemap.html#int">Détails
879 <dt>dbd or fastdbd</dt>
880 <dd>Une commande SQL SELECT à exécuter pour rechercher la cible
881 de réécriture (<a href="../rewrite/rewritemap.html#int">Détails
885 <p>Vous trouverez plus de détails et de nombreux exemples dans le <a href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
889 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
890 <div class="directive-section"><h2><a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions" id="rewriteoptions">Directive</a></h2>
891 <table class="directive">
892 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options spéciales
893 pour le moteur de réécriture</td></tr>
894 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
895 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
896 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
897 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
898 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
899 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td><code>MaxRedirects</code> n'est plus disponible depuis
900 la version version 2.1</td></tr>
903 <p>La directive <code class="directive">RewriteOptions</code> définit
904 certaines options spéciales pour la configuration au niveau du
905 serveur ou du répertoire. La chaîne de caractères <em>Option</em>
906 ne peut actuellement prendre qu'une des valeurs suivantes :</p>
909 <dt><code>Inherit</code></dt>
912 <p>Ceci force la configuration locale à hériter de la
913 configuration du niveau supérieur. Dans le contexte des hôtes
914 virtuels, cela signifie que les correspondances, conditions et
915 règles du serveur principal sont héritées. Dans le contexte des
916 répertoires, cela signifie que les conditions et règles de la
917 configuration <code>.htaccess</code> ou les sections <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du répertoire
918 parent sont héritées. Les règles héritées sont virtuellement
919 copiées dans la section où cette directive est utilisée. Si elles
920 sont utilisées avec des règles locales, les règles héritées sont
921 placées après ces dernières. La place de cette directive - avant
922 ou après les règles locales - n'a aucune influence sur ce
923 comportement. Si des règles locales ont forcé l'arrêt de la
924 réécriture, les règles héritées ne seront pas traitées.</p>
926 <div class="warning">
927 Les règles héritées du niveau parent sont appliquées
928 <strong>after</strong> après les règles spécifiées dans le niveau
933 <dt><code>InheritBefore</code></dt>
935 <p>Même effet que l'option <code>Inherit</code> ci-dessus, mais
936 les règles spécifiées dans le niveau parent s'appliquent
937 <strong>avant</strong> les règles spécifiées dans le niveau
938 enfant. Disponible depuis la version 2.3.10 du serveur HTTP
945 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
946 <div class="directive-section"><h2><a name="RewriteRule" id="RewriteRule">RewriteRule</a> <a name="rewriterule" id="rewriterule">Directive</a></h2>
947 <table class="directive">
948 <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>
949 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
950 <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
951 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
952 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
953 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
954 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
956 <p>La directive <code class="directive">RewriteRule</code> est le
957 véritable cheval de trait de la réécriture. La directive peut
958 apparaître plusieurs fois, chaque instance définissant une
959 règle de réécriture particulière. L'ordre dans lequel ces règles
960 sont définies est important - il s'agit de l'ordre dans lequel
961 les règles seront appliquées au cours du processus de
964 <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
965 <a id="regexp" name="regexp">expression rationnelle</a>
966 compatible perl. Dans la première règle de réécriture,
967 l'expression est comparée au (%-decoded)
968 <a href="./directive-dict.html#Syntax">chemin de l'URL</a> de la
969 requête ; les expressions suivantes sont comparées à la sortie de
970 la dernière règle de réécriture qui a été appliquée.</p>
972 <div class="note"><h3>Qu'est-ce qui est comparé ?</h3>
974 <p>Dans un contexte de serveur virtuel <code class="directive"><a href="../mod/core.html#virtualhost">VirtualHost</a></code>, le <em>modèle</em> est tout
975 d'abord comparé à la portion de l'URL située entre le nom d'hôte
976 éventuellement accompagné du port, et la chaîne de paramètres (par
977 exemple "/app1/index.html").</p>
979 <p>Dans les contextes de répertoire <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> et htaccess, le
980 <em>modèle</em> est tout d'abord comparé au chemin du <em>système
981 de fichiers</em>, après suppression du préfixe ou chemin de base
982 ayant conduit à la règle <code class="directive">RewriteRule</code> (par
983 exemple "app1/index.html" ou
984 "index.html" selon l'endroit où les directives sont définies).</p>
986 <p>Si vous souhaitez faire une comparaison sur le nom
987 d'hôte, le port, ou la chaîne de requête, utilisez une
988 directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
989 comportant respectivement les variables
990 <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
991 <code>%{QUERY_STRING}</code>.</p>
994 <div class="note"><h3>Réécritures dans un contexte de répertoire</h3>
996 <li>L'utilisation du moteur de réécriture dans les
997 fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections
998 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> est un peu plus
1001 <li>Pour activer le moteur de réécriture dans ces contextes, vous devez
1002 définir "<code>RewriteEngine On</code>" <strong>et</strong>
1003 "<code>Options FollowSymLinks</code>". Si l'administrateur a désactivé
1004 la possibilité de modifier l'option <code>FollowSymLinks</code> au
1005 niveau du répertoire d'un utilisateur, vous ne pouvez pas utiliser le
1006 moteur de réécriture. Cette restriction a été instaurée à des fins de
1009 <li>Lorsqu'on utilise le moteur de réécriture dans un fichier
1010 <code>.htaccess</code>, le chemin de base du répertoire courant (qui est
1011 toujours le même pour ce même répertoire) est automatiquement
1012 <em>supprimé</em> au cours de la comparaison avec le modèle de la règle
1013 de réécriture, et automatiquement <em>ajouté</em> lorsqu'une
1014 substitution relative (ne débutant pas par un slash ou un nom de
1015 protocole) arrive à la fin d'un jeu de règles. Voir la directive
1016 <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de
1017 détails à propos de l'ajout du préfixe après les substitutions
1020 <li>Si vous souhaitez effectuer une comparaison en prenant en compte
1022 chemin de l'URL dans un contexte de répertoire (htaccess), vous devez
1023 utiliser la variable <code>%{REQUEST_URI}</code> dans la directive
1024 <code class="directive">RewriteCond</code>.</li>
1026 <li>Le prefixe supprimé se termine toujours par un slash, ce qui
1027 signifie que la comparaison s'effectue avec une chaîne qui ne comporte
1028 <em>jamais</em> de slash de début. Ainsi, un <em>modèle</em> contenant
1029 <code>^/</code> ne correspondra jamais dans un contexte de répertoire.</li>
1031 <li>Bien que les règles de réécriture soient permises du point de vue de
1032 la syntaxe 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>, elles n'y sont pas prises en compte, et
1033 n'y sont à priori d'aucune utilité.</li>
1037 <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
1038 document <a href="../rewrite/intro.html#regex">Introduction à
1039 mod_rewrite</a>.</p>
1041 <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON
1042 ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
1043 d'inverser la signification d'un modèle, soit pour dire
1044 ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
1045 ce modèle</em>''. Le caractère NON peut donc être utilisé à
1046 titre exceptionnel, lorsqu'il est plus simple d'effectuer une
1047 comparaison avec le modèle inversé, ou dans la dernière règle
1050 <div class="note"><h3>Note</h3>
1051 Si vous utilisez le caractère NON pour inverser la signification d'un
1052 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
1053 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
1054 pas (autrement dit, sa négation correspond), les groupes sont vides.
1055 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
1056 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
1060 <p>Dans une règle de réécriture,
1061 <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
1062 de caractères qui remplace le chemin de l'URL original qui
1063 correspondait au <em>Modèle</em>. <em>Substitution</em> peut
1068 <dt>un chemin du système de fichiers</dt>
1070 <dd>Il indique alors la localisation dans le système de
1071 fichiers de la ressource qui doit être envoyée au client.</dd>
1073 <dt>chemin d'URL</dt>
1075 <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
1076 doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1077 essaie de deviner si vous avez spécifié un chemin du système
1078 de fichiers ou un chemin d'URL en vérifiant si la première
1079 partie du chemin existe à la racine du système de fichiers.
1080 Par exemple, si vous avez spécifié comme chaîne de
1081 <em>Substitution</em> <code>/www/file.html</code>, cette
1082 dernière sera traitée comme un chemin d'URL <em>à moins</em>
1083 qu'un répertoire nommé <code>www</code> n'existe à la racine
1084 de votre système de fichiers, auquel cas la chaîne de
1085 substitution sera traitée comme un chemin du système de
1086 fichiers. Si vous désirez que d'autres directives de
1087 correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au
1088 chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
1089 comme décrit ci-dessous.</dd>
1091 <dt>URL absolue</dt>
1093 <dd>Si une URL absolue est spécifiée,
1094 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte
1095 correspond à celui de l'hôte local. Si c'est le cas, le
1096 protocole et le nom d'hôte sont supprimés, et ce qui reste est
1097 traité comme un chemin d'URL. Dans le cas contraire, une
1098 redirection externe vers l'URL indiquée est effectuée. Pour
1099 forcer une redirection externe vers l'hôte local, voir le
1100 drapeau <code>[R]</code> ci-dessous.</dd>
1102 <dt><code>-</code> (tiret)</dt>
1104 <dd>Un tiret indique qu'aucune substitution ne doit être
1105 effectuée (le chemin considéré est transmis sans changement).
1106 Ceci est utile quand un drapeau doit être appliqué sans
1107 modifier le chemin (voir ci-dessous).</dd>
1111 <p>En plus du texte, la chaîne <em>Substition</em> peut
1115 <li>des références arrières (<code>$N</code>) vers le modèle
1116 d'une directive RewriteRule</li>
1118 <li>des références arrières (<code>%N</code>) vers le dernier
1119 modèle d'une directive RewriteCond qui correspondait</li>
1121 <li>des variables du serveur comme dans les chaînes de test de
1122 condition d'une règle (<code>%{VARNAME}</code>)</li>
1125 <a href="#mapfunc">fonctions de comparaison</a>
1126 (<code>${nom correspondance:clé|défaut}</code>)</li>
1129 <p>Les références arrières sont des identificateurs de la forme
1130 <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1131 seront remplacés par le contenu du <strong>N</strong>ème groupe
1132 du <em>Modèle</em> qui correspondait. Les variables du serveur
1133 sont les mêmes que dans la <em>Chaîne de test</em> d'une
1134 directive <code>RewriteCond</code>. Les fonctions de comparaison
1135 sont issues de la directive <code>RewriteMap</code> dans la
1136 section de laquelle elles sont décrites. Ces trois types de
1137 variables sont évaluées dans l'ordre ci-dessus.</p>
1139 <p>Comme mentionné précédemment, toutes les règles de
1140 réécriture sont appliquées à la chaîne de <em>Substitution</em>
1141 (selon l'ordre dans lequel elles sont définies dans le fichier
1142 de configuration). L'URL est <strong>intégralement
1143 remplacée</strong> par la chaîne de <em>Substitution</em> et le
1144 processus de réécriture se poursuit jusqu'à ce que toutes les
1145 règles aient été appliquées, ou qu'il soit explicitement stoppé
1146 par un drapeau <code><strong>L</strong></code>.</p>
1148 <div class="note"><h3>Modifier la chaîne de requête</h3>
1149 <p>Par défaut, la chaîne de requête est transmise sans
1150 modification. Vous pouvez cependant créer dans la chaîne de
1151 substitution des URLs dont une partie constitue une chaîne de
1152 requête. Pour cela, ajoutez simplement un point d'interrogation
1153 dans la chaîne de substitution pour indiquer que le texte qui
1154 suit doit être réinjecté dans la chaîne de requête. Pour
1155 supprimer une chaîne de requête, terminez simplement la chaîne de
1156 substitution par un point d'interrogation. Pour combiner les
1157 nouvelles chaînes de requête avec les anciennes, utilisez le
1158 drapeau <code>[QSA]</code>.</p>
1162 <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1164 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1165 comme troisième argument de la directive
1166 <code>RewriteRule</code>. Séparés par des virgules au sein d'une
1167 liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1168 être choisis dans la table suivante. Vous trouverez plus de
1169 détails, et des exemples pour chaque drapeau dans le <a href="../rewrite/flags.html">document à propos des drapeaux de
1172 <table class="bordered">
1173 <tr><th>Drapeaux et syntaxe</th>
1178 <td>Echappe les caractères non-alphanumériques <em>avant</em>
1179 d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1183 <td>La règle est chaînée avec la règle suivante. Si la règle
1184 échoue, la ou les règles avec lesquelles elle est est chaînée
1185 seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1188 <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1189 <td>Définit un cookie au niveau du navigateur client. La syntaxe
1191 CO=<em>NAME</em>:<em>VAL</em>:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>[:<em>secure</em>[:<em>httponly</em>]]]] <em><a href="../rewrite/flags.html#flag_co">details ...</a></em>
1192 <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1196 <td>discardpath|DPI</td>
1197 <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails
1201 <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
1202 <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1203 <em>VAL</em> si elle est fournie). La variante !<em>VAR</em>
1204 annule la définition de la variable <em>VAR</em>.<em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1207 <td>forbidden|F</td>
1208 <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1209 <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1213 <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1216 <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1217 <td>L'URI résultant est envoyé au <em>Gestionnaire de
1218 contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1222 <td>Arrête le processus de réécriture immédiatement et n'applique
1223 plus aucune règle. Prêtez une attention particulière aux mises
1224 en garde concernant les contextes de niveau répertoire et
1225 .htaccess (voir aussi le drapeau END). <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1229 <td>Réexécute le processus de réécriture à partir de la première
1230 règle, en utilisant le résultat du jeu de règles, sous réserve
1231 qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails
1236 <td>Rend la comparaison entre modèles insensible à la casse.
1237 <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1240 <td>noescape|NE</td>
1241 <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1242 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>
1245 <td>nosubreq|NS</td>
1246 <td>La règle est sautée si la requête courante est une
1247 sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1251 <td>Force l'envoi en interne de l'URL de substitution en tant
1252 que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails
1256 <td>passthrough|PT</td>
1257 <td>L'URI résultant est repassé au moteur de mise en
1258 correspondance des URLs pour y être traité par d'autres
1259 traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1260 <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1263 <td>qsappend|QSA</td>
1264 <td>Ajoute toute chaîne de paramètres créée dans la cible de
1265 réécriture à toute chaîne de paramètres présente dans l'URL de la
1266 requête originale. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1269 <td>qsdiscard|QSD</td>
1270 <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails
1274 <td>redirect|R[=<em>code</em>]</td>
1275 <td>Force une redirection externe, avec un code de statut HTTP
1276 optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em>
1281 <td>Arrête le processus de réécriture immédiatement et
1282 n'applique plus aucune règle. Empêche aussi l'exécution
1283 ultérieure de règles de réécriture dans des contextes de
1284 répertoire et des fichiers .htaccess (disponible depuis la
1285 version 2.3.9) <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1288 <td>skip|S=<em>nombre</em></td>
1289 <td>Si la règle courante s'applique, le moteur de réécriture
1290 doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1293 <td>type|T=<em>MIME-type</em></td>
1294 <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
1295 spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1299 <div class="note"><h3>Développement du répertoire home</h3>
1300 <p> Quand la chaîne de substitution commence par quelque chose comme
1301 "/~user" (de manière explicite ou par références arrières), mod_rewrite
1302 développe le répertoire home sans tenir compte de la présence ou de la
1303 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
1305 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1306 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
1309 <p>Voici toutes les combinaisons de substitution et leurs
1310 significations :</p>
1312 <p><strong>Dans la configuration au niveau du serveur principal
1313 (<code>httpd.conf</code>)<br />
1314 pour la requête ``<code>GET
1315 /chemin/infochemin</code>'':</strong><br />
1318 <table class="bordered">
1321 <th>Résultat de la substitution</th>
1325 <td>^/un_chemin(.*) autre_chemin$1</td>
1326 <td>invalide, non supporté</td>
1330 <td>^/un_chemin(.*) autre_chemin$1 [R]</td>
1331 <td>invalide, non supporté</td>
1335 <td>^/un_chemin(.*) autre_chemin$1 [P]</td>
1336 <td>invalide, non supporté</td>
1340 <td>^/un_chemin(.*) /autre_chemin$1</td>
1341 <td>/autre_chemin/info_chemin</td>
1345 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1346 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1350 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1351 <td>sans objet, non supporté</td>
1355 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1356 <td>/autre_chemin/info_chemin</td>
1360 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1361 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1365 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1366 <td>sans objet, non supporté</td>
1370 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1371 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1375 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1376 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1381 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1382 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1386 <p><strong>Dans une configuration de niveau répertoire pour
1387 <code>/chemin</code><br />
1388 (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1389 <code>RewriteBase /chemin</code>)<br />
1390 pour la requête ``<code>GET
1391 /chemin/chemin-local/infochemin</code>'':</strong><br />
1394 <table class="bordered">
1398 <th>Résultat de la substitution</th>
1402 <td>^chemin-local(.*) autre-chemin$1</td>
1403 <td>/chemin/autre-chemin/infochemin</td>
1407 <td>^chemin-local(.*) autre-chemin$1 [R]</td>
1408 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1413 <td>^chemin-local(.*) autre-chemin$1 [P]</td>
1414 <td>n'a pas lieu d'être, non supporté</td>
1418 <td>^chemin-local(.*) /autre-chemin$1</td>
1419 <td>/autre-chemin/infochemin</td>
1423 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1424 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1428 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1429 <td>n'a pas lieu d'être, non supporté</td>
1433 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1434 <td>/autre-chemin/infochemin</td>
1438 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1439 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1443 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1444 <td>n'a pas lieu d'être, non supporté</td>
1448 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1449 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1453 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1454 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1455 (le drapeau [R] est redondant)</td>
1459 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1460 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1468 <div class="bottomlang">
1469 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> |
1470 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p>
1471 </div><div id="footer">
1472 <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>
1473 <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>