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.5</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.5</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 <div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
28 anglaise pour les changements récents.</div>
29 <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
30 règles permettant de réécrire les URLs des requêtes
32 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
33 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>rewrite_module</td></tr>
34 <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_rewrite.c</td></tr></table>
37 <p>Le module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> utilise un moteur de
38 réécriture à base de règles, basé sur un interpréteur
39 d'expressions rationnelles, pour réécrire les URLs à la volée. Par
40 défaut, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> met en correspondance une URL
41 avec le système de fichiers. Cependant, on peut aussi l'utiliser
42 pour rediriger une URL vers une autre URL, ou pour invoquer une
43 requête interne à destination du mandataire.</p>
44 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> fournit une méthode souple et
45 puissante pour manipuler les URLs en utilisant un nombre illimité
46 de règles. Chaque règle peut être associée à un nombre illimité de
47 conditions, afin de vous permettre de réécrire les URLs en
48 fonction de variables du serveur, de variables d'environnement,
49 d'en-têtes HTTP, ou de repères temporels.</p>
50 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> agit sur la totalité de l'URL, y
51 compris la partie chemin. Une règle de réécriture peut être
52 invoquée dans <code>httpd.conf</code> ou dans un fichier
53 <code>.htaccess</code>. Le chemin généré par une règle de
54 réécriture peut inclure une chaîne de paramètres, ou peut renvoyer
55 vers un traitement secondaire interne, une redirection vers une
56 requête externe ou vers le mandataire interne.</p>
58 <p>Vous trouverez d'avantage de détails, discussions et exemples
60 <a href="../rewrite/">documentation détaillée
61 sur mod_rewrite</a>.</p>
63 <div id="quickview"><h3 class="directives">Directives</h3>
65 <li><img alt="" src="../images/down.gif" /> <a href="#rewritebase">RewriteBase</a></li>
66 <li><img alt="" src="../images/down.gif" /> <a href="#rewritecond">RewriteCond</a></li>
67 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteengine">RewriteEngine</a></li>
68 <li><img alt="" src="../images/down.gif" /> <a href="#rewritemap">RewriteMap</a></li>
69 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteoptions">RewriteOptions</a></li>
70 <li><img alt="" src="../images/down.gif" /> <a href="#rewriterule">RewriteRule</a></li>
74 <li><img alt="" src="../images/down.gif" /> <a href="#logging">Journalisation</a></li>
76 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
78 <h2><a name="logging" id="logging">Journalisation</a></h2>
80 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> offre une journalisation détaillée
81 de ses actions aux niveaux de journalisation <code>trace1</code> à
82 <code>trace8</code>. Le niveau de journalisation peut être défini de
83 manière spécifique à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> via la directive
84 <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> : jusqu'au niveau
85 <code>debug</code> aucune action n'est journalisée, alors qu'elles
86 le sont pratiquement toutes au niveau <code>trace8</code>.</p>
89 L'utilisation d'un niveau de journalisation élevé pour
90 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> va ralentir votre serveur HTTP Apache
91 de manière dramatique ! N'utilisez un niveau de journalisation
92 supérieur à <code>trace2</code> qu'à des fins de débogage !
95 <div class="example"><h3>Exemple</h3><p><code>
96 LogLevel alert rewrite:trace3
99 <div class="note"><h3>RewriteLog</h3>
100 <p>Ceux qui sont familiers avec les versions précédentes de
101 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vont probablement rechercher en vain les
102 directives <code>RewriteLog</code> et
103 <code>RewriteLogLevel</code>. Elles ont été en effet remplacées
104 par une configuration de la journalisation par module, comme
108 <p>Pour extraire les traces spécifiques à
109 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, affichez le fichier journal en
110 redirigeant la sortie vers grep :</p>
111 <div class="example"><p><code>
112 tail -f error_log|fgrep '[rewrite:'
117 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
118 <div class="directive-section"><h2><a name="RewriteBase" id="RewriteBase">RewriteBase</a> <a name="rewritebase" id="rewritebase">Directive</a></h2>
119 <table class="directive">
120 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'URL de base pour les réécritures au niveau
122 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteBase <em>chemin URL</em></code></td></tr>
123 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Pas de valeur par défaut</code></td></tr>
124 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
125 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
126 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
127 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
129 <p>La directive <code class="directive">RewriteBase</code> définit
130 explicitement le chemin URL de base (et non le chemin du
131 répertoire dans le système de fichiers !) pour les réécritures dans un contexte
132 de répertoire dont le résultat est la substitution d'un
133 chemin relatif. Lorsque vous utilisez une directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code> dans un fichier
134 <code>.htaccess</code>, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> enlève le
135 préfixe de répertoire local avant d'effectuer le traitement, puis
136 réécrit ce qui reste de l'URL. Lorsque la réécriture est terminée,
137 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ajoute automatiquement le préfixe de
138 répertoire local (ou la valeur de la directive
139 <code class="directive">RewriteBase</code> si cette dernière est définie)
140 à la chaîne de substitution avant de la remettre à disposition du
141 serveur, comme s'il s'agissait de l'URL d'origine.</p>
143 <p>Cette directive est <em>requise</em> pour les réécritures
144 dans un contexte de répertoire défini via la directive
145 <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> lorsque la
146 substitution utilise un chemin relatif.</p>
148 <p>Si votre chemin URL n'existe pas réellement dans le système de
149 fichiers, ou ne trouve pas directement sous le répertoire défini
150 par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>, vous devez utiliser la
151 directive <code class="directive">RewriteBase</code> dans chaque fichier
152 <code>.htaccess</code> où vous voulez utiliser des directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code>.</p>
154 <p>L'exemple ci-dessous montre comment faire correspondre
155 http://example.com/mon-appli/index.html à
156 /home/www/exemple/nouveau_site.html dans un fichier
157 <code>.htaccess</code>. On suppose que le contenu disponible à
158 http://example.com/ se situe sur le disque à
159 /home/www/exemple/.</p>
161 <div class="example"><pre>
163 # Le chemin URL utilisé pour arriver dans ce contexte, et non le chemin
164 # du système de fichiers
165 RewriteBase /mon-appli/
166 RewriteRule ^index\.html$ nouveau_site.html
171 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
172 <div class="directive-section"><h2><a name="RewriteCond" id="RewriteCond">RewriteCond</a> <a name="rewritecond" id="rewritecond">Directive</a></h2>
173 <table class="directive">
174 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une condition qui devra être satisfaite pour que
175 la réécriture soit effectuée
177 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code> RewriteCond
178 <em>chaîne de test</em> <em>expression de comparaison</em></code></td></tr>
179 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
180 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
181 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
182 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
184 <p>La directive <code class="directive">RewriteCond</code> permet de définir une
185 condition d'exécution d'une règle. Une ou plusieurs conditions
186 <code class="directive">RewriteCond</code> peuvent précéder une
187 directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code>. La règle de réécriture correspondante n'est
188 ainsi exécutée que si ces conditions sont satisfaites,
189 <strong>et</strong> si l'URI correspond au modèle spécifié dans la
192 <p><em>TestString</em> est une chaîne qui peut contenir les
193 extensions suivantes en plus du texte simple :</p>
197 <strong>références arrières de règle de réécriture</strong> :
198 ce sont des références arrières de la forme
199 <strong><code>$N</code></strong> (0 <= N <= 9). $1 à $9
200 permettent d'accéder aux parties regroupées (entre
201 parenthèses) du modèle, issues de la <code>RewriteRule</code>
202 concernée par le jeu de conditions <code>RewriteCond</code>
203 courant. $0 donne accès à l'ensemble de la chaîne
204 correspondant au modèle.</li>
206 <strong>Références arrières de condition de réécriture
207 </strong> : ce sont des références arrières de la forme
208 <strong><code>%N</code></strong> (0 <= N <= 9). %1 à %9
209 permettent d'accéder aux parties regroupées (entre
210 parenthèses) du modèle, issues de la <code>RewriteRule</code>
211 concernée par le jeu de conditions <code>RewriteCond</code>
212 courant. %0 donne accès à l'ensemble de la chaîne
213 correspondant au modèle.</li>
215 <strong>extensions de table de réécriture</strong> :
216 ce sont des extensions de la forme <strong><code>${nomTable:clé|défaut}</code></strong>. Voir la <a>href="#mapfunc">documentation sur RewriteMap</a>
217 pour plus de détails.
220 <strong>Variables du serveur</strong> :
221 ce sont des variables de la forme
222 <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
223 où <em>NOM_DE_VARIABLE</em> peut contenir une chaîne issue
224 de la liste suivante :
229 <th>En-têtes HTTP :</th> <th>connexion & requête:</th> <th />
234 HTTP_USER_AGENT<br />
239 HTTP_PROXY_CONNECTION<br />
250 SCRIPT_FILENAME<br />
260 <th>variables internes au serveur :</th> <th>date et heure :</th> <th>spéciaux :</th>
270 SERVER_PROTOCOL<br />
271 SERVER_SOFTWARE<br />
289 REQUEST_FILENAME<br />
297 <p>Ces variables correspondent toutes aux en-têtes MIME
298 HTTP de mêmes noms, au variables C du serveur HTTP Apache, ou
299 aux champs <code>struct tm</code> du système Unix. La
300 plupart d'entre elles sont documentées ailleurs dans le
301 manuel ou dans la spécification CGI.</p>
303 <p>SERVER_NAME et SERVER_PORT dépendent respectivement
304 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>
306 <p>Parmi les variables
307 spécifiques à mod_rewrite, ou trouve les suivantes :</p>
310 <dt><code>IS_SUBREQ</code></dt>
312 <dd>Contient le texte "true" si la requête en cours
313 de traitement est une sous-requête, "false" dans le
314 cas contraire. Une sous-requête est générée quand un
315 module a besoin de se référer à des fichiers ou URIs
316 addidionnels pour pouvoir mener à bien sa tâche.</dd>
318 <dt><code>API_VERSION</code></dt>
320 <dd>C'est la version de l'API des modules Apache httpd
321 (l'interface interne entre le serveur et les modules)
322 pour la construction courante de httpd, telle qu'elle
323 est définie dans include/ap_mmn.h. La version de l'API
324 des modules correspond à la version du serveur Apache
326 utilisé (par exemple, pour la version 1.3.14 d'Apache
328 il s'agit de la version 19990320:10), mais intéresse
329 principalement les auteurs de modules.</dd>
331 <dt><code>THE_REQUEST</code></dt>
333 <dd>La ligne de requête HTTP complète envoyée par le
334 navigateur au serveur (par exemple, "<code>GET
335 /index.html HTTP/1.1</code>"), à l'exclusion de tout
336 en-tête ajouté par le navigateur. Cette
337 valeur n'a pas été déséchappée (décodée), à la
338 différence de la plupart des variables suivantes.</dd>
340 <dt><code>REQUEST_URI</code></dt>
342 <dd>La partie chemin de l'URI de la requête, comme
343 "/index.html". En particulier, ceci exclut la chaîne
344 de paramètres qui est quant à elle disponible via sa
345 propre variable <code>QUERY_STRING</code>.</dd>
347 <dt><code>REQUEST_FILENAME</code></dt>
349 <dd>Le chemin complet local au système de fichiers
350 du fichier ou du script correspondant
351 à la requête, s'il a déjà été déterminé par le serveur
352 au moment où on y fait référence. Dans le cas
353 contraire, et en particulier dans le cas d'un serveur
354 virtuel, <code>REQUEST_FILENAME</code> contient la
355 valeur de <code>REQUEST_URI</code>.</dd>
357 <dt><code>HTTPS</code></dt>
359 <dd>Contient le texte "on" si la connexion
360 utilise SSL/TLS, "off" dans le cas contraire
361 (Cette variable peut être utilisée sans problème, que
362 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non.</dd>
364 <dt><code>REQUEST_SCHEME</code></dt>
366 <dd>Contient le protocole de la requête (en général
367 "http" ou "https"). La valeur peut être modifiée par
368 la directive <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>.</dd>
375 <p>Si la <em>chaîne de test</em> contient la valeur spéciale
376 <code>expr</code>, <em>expression de comparaison</em> sera traité
377 en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>.</p>
379 <p>Autres points à connaître ::</p>
382 <p>Les variables <code>SCRIPT_FILENAME</code> et
383 <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
384 du champ <code>filename</code> de la
385 structure interne <code>request_rec</code>du serveur HTTP Apache.
386 Le premier nom correspond au nom de variable bien connu CGI,
387 alors que le second est l'équivalent de REQUEST_URI (qui
388 contient la valeur du champ <code>uri</code> de
389 <code>request_rec</code>).</p>
390 <p>Si une substitution intervient et si la réécriture se
391 poursuit, la valeur des deux variables sera mise à jour en
393 <p>Dans le contexte du serveur principal (c'est à dire avant que
394 la requête ne soit mise en correspondance avec le système de
395 fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
396 contenir le chemin entier dans le système de fichiers local car
397 ce chemin b'est pas connu à ce stade du traitement. Dans ce cas,
398 les deux variables contiendront la valeur de REQUEST_URI. Pour
399 obtenir le chemin complet de la requête dans le système de
400 fichiers local dans le contexte du serveur principal, utilisez une
401 référence avant à base d'URL
402 <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la valeur
403 finale de REQUEST_FILENAME.</p></li>
407 <code>%{ENV:<em>variable</em>}</code>, où <em>variable</em> peut
408 correspondre à une variable d'environnement quelconque.</li>
410 <code>%{ENV:variable}</code> est aussi disponible, où
411 <em>variable</em> peut correspondre à toute variable
412 d'environnement. Peut être consulté via des structures internes
413 d'Apache httpd et (si on ne les trouve pas ici) via la fonction
414 <code>getenv()</code> à partir du processus du serveur Apache
417 <li>Que <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non, on peut
418 utiliser <code>%{SSL:variable}</code>, où <em>variable</em>
419 peut être remplacé par le nom d'une
420 <a href="mod_ssl.html#envvars">variable
421 d'environnement SSL</a> . Si <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> n'est pas
422 chargé, cette variable contiendra toujours une chaîne vide.
423 Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
424 contenir la valeur <code>128</code>.</li>
427 On peut utiliser <code>%{HTTP:en-tête}</code>, où
428 <em>en-tête</em> peut correspondre à tout nom d'en-tête MIME
429 HTTP, pour extraire la valeur d'un en-tête envoyé dans la
430 requête HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
431 contiendra la valeur de l'en-tête HTTP
432 "<code>Proxy-Connection:</code>".
433 Si on utilise un en-tête HTTP
434 dans une condition, et si cette condition est évaluée à
435 <code>vrai</code> pour la requête, cet en-tête sera ajouté à l'en-tête Vary de
436 la réponse. Il ne le sera pas si la condition est évaluée à
437 <code>faux</code>. L'ajout de l'en-tête HTTP à l'en-tête Vary
438 est nécessaire à une mise en cache appropriée.
439 <p>Il faut garder à l'esprit que les conditions suivent une
440 logique de cout-circuit si le drapeau
441 '<strong><code>ornext|OR</code></strong>' est utilisé, et que de
442 ce fait, certaines d'entre elles ne seront pas évaluées.</p>
445 <li>A des fins de référence avant, on peut utiliser,
446 <code>%{LA-U:variable}</code>, qui
447 permet d'effectuer une sous-requête interne à base d'URL, afin
448 de déterminer la valeur finale de <em>variable</em>. Ceci permet
449 d'accéder à la valeur d'une variable pour la réécriture inconnue
450 à ce stade du traitement, mais qui sera définie au
451 cours d'une phase ultérieure.
452 <p>Par exemple, pour effectuer une réécriture dépendant de la
453 variable <code>REMOTE_USER</code> dans le contexte du serveur
454 principal (fichier <code>httpd.conf</code>), vous devez utiliser
455 <code>%{LA-U:REMOTE_USER}</code> - cette variable est définie
456 par la phase d'autorisation qui intervient <em>après</em> la
457 phase de traduction d'URL (pendant laquelle mod_rewrite opère).</p>
458 <p>Par contre, comme mod_rewrite implémente son contexte de
459 répertoire (fichier <code>.htaccess</code>) via la phase Fixup
460 de l'API, et comme la phase d'autorisation intervient
461 <em>avant</em> cette dernière, vous pouvez vous contenter
462 d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
465 <code>%{LA-F:variable}</code> peut être utilisée pour effectuer
466 une sous-requête interne (basée sur le nom de fichier), afin de
467 déterminer la valeur finale de <em>variable</em>. La plupart du
468 temps, elle est identique à LA-U (voir ci-dessus).</li>
472 <p><em>expression de comparaison</em> est une expression
473 rationnelle qui est appliquée à l'instance actuelle de
474 <em>chaîne de test</em>. <em>chaîne de test</em> est d'abord
475 évaluée, puis comparée à
476 l'<em>expression de comparaison</em>.</p>
478 <p><em>expression de comparaison</em> est en général une
479 <em>expression rationnelle compatible perl</em>, mais vous
480 disposez des syntaxes supplémentaires suivantes pour effectuer
481 d'autres tests utiles sur <em>chaîne de test</em> :
485 <li>Vous pouvez préfixer l'expression avec un caractère
486 '<code>!</code>' (point d'exclamation) pour indiquer une
487 expression de <strong>non</strong>-correspondance.</li>
489 <li>Vous pouvez effectuer des comparaisons lexicographiques de
493 <li>'<strong><expression</strong>' (inférieur au sens
494 lexicographique)<br />
495 Traite l'<em>expression</em> comme une chaîne de
496 caractères et la compare lexicographiquement à
497 <em>chaîne de test</em>. La condition est satisfaite si
498 <em>chaîne de test</em> est inférieure au sens
499 lexicographique à l'<em>expression</em>.</li>
501 <li>'<strong>>expression</strong>' (supérieur au sens
502 lexicographique)<br />
503 Traite l'<em>expression</em> comme une chaîne de
504 caractères et la compare lexicographiquement à
505 <em>chaîne de test</em>. La condition est satisfaite si
506 <em>chaîne de test</em> est supérieure au sens
507 lexicographique à l'<em>expression</em>.</li>
509 <li>'<strong>=expression</strong>' (égal au sens
510 lexicographique)<br />
511 Traite l'<em>expression</em> comme une chaîne de
512 caractères et la compare lexicographiquement à
513 <em>chaîne de test</em>. La condition est satisfaite si
514 <em>chaîne de test</em> est égale au sens
515 lexicographique à l'<em>expression</em> (les deux chaînes
516 sont exactement identiques, caractère pour caractère). Si
517 <em>expression</em> est <code>""</code> (deux guillemets),
518 <em>chaîne de test</em> est comparée à la chaîne vide.</li>
520 <li>'<strong><=expression de comparaison</strong>' (inférieur ou égal à
521 au sens lexicographique)<br />
522 Considère l'<em>expression de comparaison</em> comme une
523 chaîne de caractères et la compare au sens lexicographique à
524 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
525 précède lexicographiquement <em>expression de comparaison</em>, ou est
526 égale à <em>expression de comparaison</em> (les deux chaînes
527 sont identiques, caractère pour caractère).</li>
529 <li>'<strong>>=expression de comparaison</strong>'
530 (supérieur ou égal à au sens lexicographique)<br />
531 Considère l'<em>expression de comparaison</em> comme une
532 chaîne de caractères et la compare au sens lexicographique à
533 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
534 suit lexicographiquement <em>expression de comparaison</em>, ou est
535 égale à <em>expression de comparaison</em> (les deux chaînes
536 sont identiques, caractère pour caractère).</li>
540 Vous pouvez effectuer des comparaisons d'entiers :
543 <li>'<strong>-eq</strong>' (est numériquement égal à)<br />
544 La <em>chaîne de test</em> est considérée comme un entier,
545 et est comparée numériquement à l'<em>expression de
546 comparaison</em>. Vrai si les deux expressions sont
547 numériquement égales.</li>
549 <li>'<strong>-ge</strong>' (est numériquement supérieur ou
551 La <em>chaîne de test</em> est considérée comme un entier,
552 et est comparée numériquement à l'<em>expression de
553 comparaison</em>. Vrai si <em>chaîne de test</em> est
555 supérieure ou égale à <em>expression de comparaison</em>.</li>
557 <li>'<strong>-gt</strong>' (est numériquement supérieur à)<br />
558 La <em>chaîne de test</em> est considérée comme un entier,
559 et est comparée numériquement à l'<em>expression de
560 comparaison</em>. Vrai si <em>chaîne de test</em> est
562 supérieure à <em>expression de comparaison</em>.</li>
564 <li>'<strong>-le</strong>' (est numériquement inférieur ou
566 La <em>chaîne de test</em> est considérée comme un entier,
567 et est comparée numériquement à l'<em>expression de
568 comparaison</em>. Vrai si <em>chaîne de test</em> est
570 inférieure ou égale à <em>expression de comparaison</em>.
571 Attention à la confusion avec le drapeau <strong>-l</strong>
572 en utilisant la variante the <strong>-L</strong> ou
573 <strong>-h</strong>.</li>
575 <li>'<strong>-lt</strong>' (est numériquement inférieur à)<br />
576 La <em>chaîne de test</em> est considérée comme un entier,
577 et est comparée numériquement à l'<em>expression de
578 comparaison</em>. Vrai si <em>chaîne de test</em> est
580 inférieure à <em>expression de comparaison</em>.
581 Attention à la confusion avec le drapeau <strong>-l</strong>
582 en utilisant la variante the <strong>-L</strong> ou
583 <strong>-h</strong>.</li>
588 <li>Vous pouvez effectuer différents tests sur les attributs de
592 <li>'<strong>-d</strong>' (est un répertoire -
593 <strong>d</strong>irectory)<br />
594 Traite <em>chaîne de test</em> comme un chemin et vérifie
595 s'il existe ou pas, et s'il s'agit d'un répertoire.</li>
597 <li>'<strong>-f</strong>' (est un
598 <strong>f</strong>ichier régulier)<br />
599 Traite <em>chaîne de test</em> comme un chemin et vérifie
600 s'il existe ou pas, et s'il s'agit d'un fichier régulier.</li>
602 <li>'<strong>-F</strong>' (test de l'existence d'un fichier
603 via une sous-requête)<br />
604 Vérifie si <em>chaîne de test</em> est un fichier valide,
605 accessible à travers tous les contrôles d'accès du serveur
606 actuellement configurés pour ce chemin. C'est une
607 sous-requête interne qui effectue cette vérification - à
608 utiliser avec précautions car les performances du serveur
609 peuvent s'en trouver affectées !</li>
611 <li>'<strong>-H</strong>' (est un lien symbolique, selon la
612 convention bash)<br />
613 Voir <strong>-l</strong>.</li>
615 <li>'<strong>-l</strong>' (est un lien symbolique)<br />
616 Considère la <em>chaîne de test</em> comme un chemin et
617 vérifie son existence et si elle est un lien symbolique. On
618 peut aussi utiliser la convention bash <strong>-L</strong>
619 ou <strong>-h</strong> lorsqu'il y a risque de confusion
620 avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</li>
622 <li>'<strong>-L</strong>' (est un lien symbolique, selon la
623 convention bash)<br />
624 Voir <strong>-l</strong>.</li>
626 <li>'<strong>-s</strong>' (est un fichier régulier d'une
627 certaine taille)<br />
628 Considère la <em>chaîne de test</em> comme un chemin et
629 vérifie son existence et si elle est un fichier régulier
630 d'une taille supérieure à zéro.</li>
632 <li>'<strong>-U</strong>' (test de l'existence d'une
633 <strong>U</strong>RL via une sous-requête)<br />
634 Vérifie si <em>chaîne de test</em> est une URL valide,
635 accessible à travers tous les contrôles d'accès du serveur
636 actuellement configurés pour ce chemin. C'est une
637 sous-requête interne qui effectue cette vérification - à
638 utiliser avec précautions car les performances du serveur
639 peuvent s'en trouver affectées !</li>
641 <li>'<strong>-x</strong>' (a l'attribut d'exécution positionné)<br />
642 Considère la <em>chaîne de test</em> comme un chemin et
643 vérifie son existence et si elle a son attribut d'exécution
644 positionné. Ce positionnement est déterminé en fonction de
645 l'OS sous-jacent.</li>
649 <div class="note"><h3>Note :</h3>
650 Tous ces tests peuvent aussi être préfixés par un point
651 d'exclamation ('!') pour inverser leur signification.
656 <p>Si la <em>chaîne de test</em> contient la valeur spéciale
657 <code>expr</code>, la <em>chaîne de comparaison</em> sera
658 traitée en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>.</p>
661 Dans l'exemple ci-dessous, on utilise <code>-strmatch</code>
662 pour comparer le <code>REFERER</code> avec le nom d'hôte du
663 site afin de bloquer le hotlinking (référencement direct)
667 <div class="example"><p><code>
668 RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"<br />
669 RewriteRule ^/images - [F]
673 <li>Vous pouvez aussi définir certains drapeaux pour
674 l'<em>expression de comparaison</em> en ajoutant ces
675 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
676 comme troisième argument de la directive
677 <code>RewriteCond</code>, où <em>drapeaux</em> est un
678 sous-ensemble séparé par des virgules des drapeaux suivants :
681 <li>'<strong><code>nocase|NC</code></strong>'
682 (<strong>n</strong>o <strong>c</strong>ase)<br />
683 Rend le test insensible à la casse - il n'est pas fait de
684 distinction entre majuscules et minuscules, à la fois dans le
685 développement de <em>chaîne de test</em> et dans
686 <em>expression de comparaison</em>. Ce drapeau n'est pris en
687 compte que lors d'une comparaison entre <em>chaîne de test</em>
688 et <em>expression de comparaison</em>. Il ne l'est pas pour les
689 vérification par sous-requêtes ou sur le système de
693 '<strong><code>ornext|OR</code></strong>'
694 (<strong>ou</strong> condition suivante)<br />
695 Permet de chaîner les conditions de règles avec un OU au
696 lieu du AND implicite. Exemple typique :
698 <div class="example"><pre>
699 RewriteCond %{REMOTE_HOST} ^host1 [OR]
700 RewriteCond %{REMOTE_HOST} ^host2 [OR]
701 RewriteCond %{REMOTE_HOST} ^host3
702 RewriteRule ...règles concernant tous ces hôtes...
705 Sans ce drapeau, les paires
706 condition/règle devraient être écrites trois fois.
709 <li>'<strong><code>novary|NV</code></strong>'
710 (<strong>n</strong>o <strong>v</strong>ary)<br />
711 Si la condition contient un en-tête HTTP, ce drapeau empêche
712 ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br />
713 L'utilisation de ce drapeau peut provoquer une mise en cache
714 incorrecte de la réponse, si la représentation de cette réponse
715 varie avec la valeur de l'en-tête considéré. Ce drapeau ne
716 devrait donc être utilisé que si l'on maîtrise parfaitement le
717 fonctionnement de l'en-tête Vary.
723 <p><strong>Exemple :</strong></p>
725 <p>Pour réécrire la page d'accueil d'un site en fonction de
726 l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
727 pouvez utiliser ce qui suit : </p>
729 <div class="example"><pre>
730 RewriteCond %{HTTP_USER_AGENT} ^Mozilla
731 RewriteRule ^/$ /homepage.max.html [L]
733 RewriteCond %{HTTP_USER_AGENT} ^Lynx
734 RewriteRule ^/$ /homepage.min.html [L]
736 RewriteRule ^/$ /homepage.std.html [L]
739 <p>Explications : si vous utilisez un navigateur
740 (Netscape Navigator, Mozilla etc) qui s'identifie comme
741 'Mozilla', vous accèderez à la page d'accueil max (qui
742 peut contenir des frames, ou d'autres ressources
744 Si vous utilisez le navigateur Lynx (qui est un navigateur
745 en mode texte), vous accèderez à une page d'accueil min
746 (qui peut être une version conçue pour une navigation simple
748 Si aucune de ces conditions n'est satisfaite (vous utilisez tout
749 autre navigateur, ou votre navigateur s'identifie de manière non
750 standard), vous accèderez à la page d'accueil std
755 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
756 <div class="directive-section"><h2><a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a> <a name="rewriteengine" id="rewriteengine">Directive</a></h2>
757 <table class="directive">
758 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active ou désactive l'exécution du
759 moteur de réécriture</td></tr>
760 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteEngine on|off</code></td></tr>
761 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>RewriteEngine off</code></td></tr>
762 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
763 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
764 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
765 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
768 <p>La directive <code class="directive">RewriteEngine</code> active ou
769 désactive l'exécution du moteur de réécriture. Si sa valeur est
770 <code>off</code>, ce module n'exécutera aucun traitement et ne
771 mettra pas à jour les variables d'environnement
772 <code>SCRIPT_URx</code>.</p>
774 <p>Pour désactiver le module, il vaut mieux utiliser cette
775 directive que commenter toutes les directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code> !</p>
777 <p>Notez que les hôtes virtuels n'héritent pas des
778 configurations de réécriture. Ceci implique que vous devez
779 insérer une directive <code>RewriteEngine on</code> dans chaque
780 hôte virtuel pour lequel vous souhaitez utiliser des règles
783 <p>Les directives <code class="directive">RewriteMap</code> du type
784 <code>prg</code> ne sont pas prises en compte au cours de
785 l'initialisation du serveur si elle ont été définies dans un
786 contexte où la directive <code class="directive">RewriteEngine</code> n'a
787 pas été définie à <code>on</code>.</p>
791 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
792 <div class="directive-section"><h2><a name="RewriteMap" id="RewriteMap">RewriteMap</a> <a name="rewritemap" id="rewritemap">Directive</a></h2>
793 <table class="directive">
794 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une fonction de mise en correspondance pour la
795 recherche de mots-clés</td></tr>
796 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteMap <em>nom de la correspondance</em> <em>type de
797 correspondance</em>:<em>source de la correspondance</em>
799 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
800 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
801 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
802 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Il est possible de choisir entre plusieurs types de
803 bases de données depuis la version 2.0.41 du serveur HTTP Apache</td></tr>
805 <p>La directive <code class="directive">RewriteMap</code> définit une
806 <em>Table de correspondance pour la réécriture</em> que les
807 fonctions de mise en correspondance
808 peuvent utiliser dans les chaînes de substitution des règles
809 pour insérer/substituer des champs en recherchant des mots-clés.
810 La source utilisée pour cette recherche peut être de plusieurs
813 <p><a id="mapfunc" name="mapfunc"><em>nom de la
814 correspondance</em></a> est le nom de la table de correspondance
815 et servira à spécifier une fonction de mise en correspondance
816 pour les chaînes de substitution d'une règle de réécriture selon
817 une des constructions suivantes :</p>
820 <strong><code>${</code> <em>nom de la
821 correspondance</em> <code>:</code>
822 <em>mot-clé</em> <code>}</code><br />
823 <code>${</code> <em>nom de la
824 correspondance</em> <code>:</code>
825 <em>mot-clé</em> <code>|</code> <em>valeur par défaut</em>
826 <code>}</code></strong>
829 <p>Lorsqu'une telle construction est rencontrée, la table de
830 correspondance <em>Nom de la correspondance</em> est consultée
831 et la clé <em>mot-clé</em> recherchée. Si la clé est trouvée, la
832 construction est remplacée par
833 la <em>valeur de remplacement</em>. Si la clé n'est pas trouvée,
834 elle est remplacée par la <em>valeur par défaut</em>, ou par une
835 chaîne vide si aucune <em>valeur par défaut</em> n'est
836 spécifiée. La valeur vide se comporte comme si la
837 clé était absente ; il est donc impossible de distinguer une
838 valeur vide d'une absence de clé.</p>
840 <p>Par exemple, vous pouvez définir une directive
841 <code class="directive">RewriteMap</code> comme suit </p>
843 <div class="example"><p><code>
844 RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt
847 <p>Vous pourrez ensuite utiliser cette table dans une
848 directive <code class="directive">RewriteRule</code> comme suit :</p>
850 <div class="example"><p><code>
851 RewriteRule ^/ex/(.*) ${map-exemple:$1}
854 <p>Les combinaisons suivantes pour <em>type de correspondance</em>
855 et <em>source de la correspondance</em>
856 peuvent être utilisées :</p>
860 <dd>Un fichier texte contenant des paires clé-valeur séparées
861 par des espaces, une paire par ligne (<a href="../rewrite/rewritemap.html#txt">Détails ...</a>).</dd>
864 <dd>Sélection aléatoire d'une entrée depuis un fichier texte (<a href="../rewrite/rewritemap.html#rnd">Détails ...</a>).</dd>
867 <dd>Recherche une entrée dans un fichier dbm contenant des
868 paires nom-valeur. Le condensé hash est élaboré à partir d'un
869 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>
872 <dd>Une des quatre fonctions internes disponibles que fournit
873 <code>RewriteMap</code>: toupper, tolower, escape ou unescape
874 (<a href="../rewrite/rewritemap.html#int">Détails ...</a>).</dd>
877 <dd>Appelle un programme externe ou un script pour effectuer la
878 réécriture (<a href="../rewrite/rewritemap.html#int">Détails
881 <dt>dbd or fastdbd</dt>
882 <dd>Une commande SQL SELECT à exécuter pour rechercher la cible
883 de réécriture (<a href="../rewrite/rewritemap.html#int">Détails
887 <p>Vous trouverez plus de détails et de nombreux exemples dans le <a href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
891 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
892 <div class="directive-section"><h2><a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions" id="rewriteoptions">Directive</a></h2>
893 <table class="directive">
894 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options spéciales
895 pour le moteur de réécriture</td></tr>
896 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
897 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
898 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
899 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
900 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
901 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td><code>MaxRedirects</code> n'est plus disponible depuis
902 la version version 2.1</td></tr>
905 <p>La directive <code class="directive">RewriteOptions</code> définit
906 certaines options spéciales pour la configuration au niveau du
907 serveur ou du répertoire. La chaîne de caractères <em>Option</em>
908 ne peut actuellement prendre qu'une des valeurs suivantes :</p>
911 <dt><code>Inherit</code></dt>
914 <p>Ceci force la configuration locale à hériter de la
915 configuration du niveau supérieur. Dans le contexte des hôtes
916 virtuels, cela signifie que les correspondances, conditions et
917 règles du serveur principal sont héritées. Dans le contexte des
918 répertoires, cela signifie que les conditions et règles de la
919 configuration <code>.htaccess</code> ou les sections <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du répertoire
920 parent sont héritées. Les règles héritées sont virtuellement
921 copiées dans la section où cette directive est utilisée. Si elles
922 sont utilisées avec des règles locales, les règles héritées sont
923 placées après ces dernières. La place de cette directive - avant
924 ou après les règles locales - n'a aucune influence sur ce
925 comportement. Si des règles locales ont forcé l'arrêt de la
926 réécriture, les règles héritées ne seront pas traitées.</p>
928 <div class="warning">
929 Les règles héritées du niveau parent sont appliquées
930 <strong>after</strong> après les règles spécifiées dans le niveau
935 <dt><code>InheritBefore</code></dt>
937 <p>Même effet que l'option <code>Inherit</code> ci-dessus, mais
938 les règles spécifiées dans le niveau parent s'appliquent
939 <strong>avant</strong> les règles spécifiées dans le niveau
940 enfant. Disponible depuis la version 2.3.10 du serveur HTTP
944 <dt><code>AllowNoSlash</code></dt>
946 <p>Par défaut, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ignore les URLs qui
947 correspondent à un répertoire sur disque, mais ne comportent pas
948 de slash final, afin que le module <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>
949 redirige le client vers l'URL canonique avec un slash final.</p>
951 <p>Lorsque la directive <code class="directive"><a href="../mod/mod_dir.html#directoryslash">DirectorySlash</a></code> est définie à off, il
952 est possible de spécifier l'option <code>AllowNoSlash</code> pour
953 s'assurer que les règles de réécriture ne soient plus ignorées.
954 Si on le souhaite, cette option permet de faire s'appliquer des
955 règles de réécriture qui correspondent à un répertoire sans slash
956 final au sein de fichiers .htaccess. Elle est disponible à
957 partir de la version 2.4.0 du serveur HTTP Apache.
959 When the <code class="directive"><a href="../mod/mod_dir.html#directoryslash">DirectorySlash</a></code> directive
960 + is set to off, the <code>AllowNoSlash</code> option can be enabled to ensure
961 + that rewrite rules are no longer ignored. This option makes it possible to
962 + apply rewrite rules within .htaccess files that match the directory without
963 + a trailing slash, if so desired. Available in Apache HTTP Server 2.4.0 and
970 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
971 <div class="directive-section"><h2><a name="RewriteRule" id="RewriteRule">RewriteRule</a> <a name="rewriterule" id="rewriterule">Directive</a></h2>
972 <table class="directive">
973 <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>
974 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
975 <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
976 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
977 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
978 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
979 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
981 <p>La directive <code class="directive">RewriteRule</code> est le
982 véritable cheval de trait de la réécriture. La directive peut
983 apparaître plusieurs fois, chaque instance définissant une
984 règle de réécriture particulière. L'ordre dans lequel ces règles
985 sont définies est important - il s'agit de l'ordre dans lequel
986 les règles seront appliquées au cours du processus de
989 <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
990 <a id="regexp" name="regexp">expression rationnelle</a>
991 compatible perl. Dans la première règle de réécriture,
992 l'expression est comparée au (%-decoded)
993 <a href="./directive-dict.html#Syntax">chemin de l'URL</a> de la
994 requête ; les expressions suivantes sont comparées à la sortie de
995 la dernière règle de réécriture qui a été appliquée.</p>
997 <div class="note"><h3><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est comparé ?</a></h3>
999 <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
1000 d'abord comparé à la portion de l'URL située entre le nom d'hôte
1001 éventuellement accompagné du port, et la chaîne de paramètres (par
1002 exemple "/app1/index.html").</p>
1004 <p>Dans les contextes de répertoire <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> et htaccess, le
1005 <em>modèle</em> est tout d'abord comparé au chemin du <em>système
1006 de fichiers</em>, après suppression du préfixe ou chemin de base
1007 ayant conduit à la règle <code class="directive">RewriteRule</code> (par
1008 exemple "app1/index.html" ou
1009 "index.html" selon l'endroit où les directives sont définies).</p>
1011 <p>Si vous souhaitez faire une comparaison sur le nom
1012 d'hôte, le port, ou la chaîne de requête, utilisez une
1013 directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
1014 comportant respectivement les variables
1015 <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
1016 <code>%{QUERY_STRING}</code>.</p>
1019 <div class="note"><h3>Réécritures dans un contexte de répertoire</h3>
1021 <li>L'utilisation du moteur de réécriture dans les
1022 fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections
1023 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> est un peu plus
1026 <li>Pour activer le moteur de réécriture dans ces contextes, vous devez
1027 définir "<code>RewriteEngine On</code>" <strong>et</strong>
1028 "<code>Options FollowSymLinks</code>". Si l'administrateur a désactivé
1029 la possibilité de modifier l'option <code>FollowSymLinks</code> au
1030 niveau du répertoire d'un utilisateur, vous ne pouvez pas utiliser le
1031 moteur de réécriture. Cette restriction a été instaurée à des fins de
1034 <li>Lorsqu'on utilise le moteur de réécriture dans un fichier
1035 <code>.htaccess</code>, le chemin de base du répertoire courant (qui est
1036 toujours le même pour ce même répertoire) est automatiquement
1037 <em>supprimé</em> au cours de la comparaison avec le modèle de la règle
1038 de réécriture, et automatiquement <em>ajouté</em> lorsqu'une
1039 substitution relative (ne débutant pas par un slash ou un nom de
1040 protocole) arrive à la fin d'un jeu de règles. Voir la directive
1041 <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de
1042 détails à propos de l'ajout du préfixe après les substitutions
1045 <li>Si vous souhaitez effectuer une comparaison en prenant en compte
1047 chemin de l'URL dans un contexte de répertoire (htaccess), vous devez
1048 utiliser la variable <code>%{REQUEST_URI}</code> dans la directive
1049 <code class="directive">RewriteCond</code>.</li>
1051 <li>Le prefixe supprimé se termine toujours par un slash, ce qui
1052 signifie que la comparaison s'effectue avec une chaîne qui ne comporte
1053 <em>jamais</em> de slash de début. Ainsi, un <em>modèle</em> contenant
1054 <code>^/</code> ne correspondra jamais dans un contexte de répertoire.</li>
1056 <li>Bien que les règles de réécriture soient permises du point de vue de
1057 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
1058 n'y sont à priori d'aucune utilité.</li>
1062 <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
1063 document <a href="../rewrite/intro.html#regex">Introduction à
1064 mod_rewrite</a>.</p>
1066 <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON
1067 ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
1068 d'inverser la signification d'un modèle, soit pour dire
1069 ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
1070 ce modèle</em>''. Le caractère NON peut donc être utilisé à
1071 titre exceptionnel, lorsqu'il est plus simple d'effectuer une
1072 comparaison avec le modèle inversé, ou dans la dernière règle
1075 <div class="note"><h3>Note</h3>
1076 Si vous utilisez le caractère NON pour inverser la signification d'un
1077 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
1078 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
1079 pas (autrement dit, sa négation correspond), les groupes sont vides.
1080 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
1081 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
1085 <p>Dans une règle de réécriture,
1086 <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
1087 de caractères qui remplace le chemin de l'URL original qui
1088 correspondait au <em>Modèle</em>. <em>Substitution</em> peut
1093 <dt>un chemin du système de fichiers</dt>
1095 <dd>Il indique alors la localisation dans le système de
1096 fichiers de la ressource qui doit être envoyée au client.</dd>
1098 <dt>chemin d'URL</dt>
1100 <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
1101 doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1102 essaie de deviner si vous avez spécifié un chemin du système
1103 de fichiers ou un chemin d'URL en vérifiant si la première
1104 partie du chemin existe à la racine du système de fichiers.
1105 Par exemple, si vous avez spécifié comme chaîne de
1106 <em>Substitution</em> <code>/www/file.html</code>, cette
1107 dernière sera traitée comme un chemin d'URL <em>à moins</em>
1108 qu'un répertoire nommé <code>www</code> n'existe à la racine
1109 de votre système de fichiers, auquel cas la chaîne de
1110 substitution sera traitée comme un chemin du système de
1111 fichiers. Si vous désirez que d'autres directives de
1112 correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au
1113 chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
1114 comme décrit ci-dessous.</dd>
1116 <dt>URL absolue</dt>
1118 <dd>Si une URL absolue est spécifiée,
1119 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte
1120 correspond à celui de l'hôte local. Si c'est le cas, le
1121 protocole et le nom d'hôte sont supprimés, et ce qui reste est
1122 traité comme un chemin d'URL. Dans le cas contraire, une
1123 redirection externe vers l'URL indiquée est effectuée. Pour
1124 forcer une redirection externe vers l'hôte local, voir le
1125 drapeau <code>[R]</code> ci-dessous.</dd>
1127 <dt><code>-</code> (tiret)</dt>
1129 <dd>Un tiret indique qu'aucune substitution ne doit être
1130 effectuée (le chemin considéré est transmis sans changement).
1131 Ceci est utile quand un drapeau doit être appliqué sans
1132 modifier le chemin (voir ci-dessous).</dd>
1136 <p>En plus du texte, la chaîne <em>Substition</em> peut
1140 <li>des références arrières (<code>$N</code>) vers le modèle
1141 d'une directive RewriteRule</li>
1143 <li>des références arrières (<code>%N</code>) vers le dernier
1144 modèle d'une directive RewriteCond qui correspondait</li>
1146 <li>des variables du serveur comme dans les chaînes de test de
1147 condition d'une règle (<code>%{VARNAME}</code>)</li>
1150 <a href="#mapfunc">fonctions de comparaison</a>
1151 (<code>${nom correspondance:clé|défaut}</code>)</li>
1154 <p>Les références arrières sont des identificateurs de la forme
1155 <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1156 seront remplacés par le contenu du <strong>N</strong>ème groupe
1157 du <em>Modèle</em> qui correspondait. Les variables du serveur
1158 sont les mêmes que dans la <em>Chaîne de test</em> d'une
1159 directive <code>RewriteCond</code>. Les fonctions de comparaison
1160 sont issues de la directive <code>RewriteMap</code> dans la
1161 section de laquelle elles sont décrites. Ces trois types de
1162 variables sont évaluées dans l'ordre ci-dessus.</p>
1164 <p>Chaque règle de réécriture s'applique au résultat de la règle
1165 précédente, selon l'ordre dans lequel elles ont été définies dans
1166 le fichier de configuration. L'URI du chemin du fichier (voir
1167 ci-dessus <a href="#what_is_matched">Qu'est-ce qui est
1168 comparé ?</a>) est <strong>intégralement
1169 remplacée</strong> par la chaîne de <em>Substitution</em> et le
1170 processus de réécriture se poursuit jusqu'à ce que toutes les
1171 règles aient été appliquées, ou qu'il soit explicitement stoppé
1172 par un drapeau <a href="../rewrite/flags.html#flag_l"><code><strong>L</strong></code></a>,
1173 ou par un autre drapeau qui implique un arrêt immédiat, comme
1174 <code><strong>END</strong></code> ou
1175 <code><strong>F</strong></code>.</p>
1177 <div class="note"><h3>Modifier la chaîne de requête</h3>
1178 <p>Par défaut, la chaîne de requête est transmise sans
1179 modification. Vous pouvez cependant créer dans la chaîne de
1180 substitution des URLs dont une partie constitue une chaîne de
1181 requête. Pour cela, ajoutez simplement un point d'interrogation
1182 dans la chaîne de substitution pour indiquer que le texte qui
1183 suit doit être réinjecté dans la chaîne de requête. Pour
1184 supprimer une chaîne de requête, terminez simplement la chaîne de
1185 substitution par un point d'interrogation. Pour combiner les
1186 nouvelles chaînes de requête avec les anciennes, utilisez le
1187 drapeau <code>[QSA]</code>.</p>
1191 <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1193 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1194 comme troisième argument de la directive
1195 <code>RewriteRule</code>. Séparés par des virgules au sein d'une
1196 liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1197 être choisis dans la table suivante. Vous trouverez plus de
1198 détails, et des exemples pour chaque drapeau dans le <a href="../rewrite/flags.html">document à propos des drapeaux de
1201 <table class="bordered">
1202 <tr><th>Drapeaux et syntaxe</th>
1207 <td>Echappe les caractères non-alphanumériques <em>avant</em>
1208 d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1212 <td>La règle est chaînée avec la règle suivante. Si la règle
1213 échoue, la ou les règles avec lesquelles elle est est chaînée
1214 seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1217 <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1218 <td>Définit un cookie au niveau du navigateur client. La syntaxe
1220 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>
1221 <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1225 <td>discardpath|DPI</td>
1226 <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails
1230 <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
1231 <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1232 <em>VAL</em> si elle est fournie). La variante !<em>VAR</em>
1233 annule la définition de la variable <em>VAR</em>.<em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1236 <td>forbidden|F</td>
1237 <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1238 <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1242 <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1245 <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1246 <td>L'URI résultant est envoyé au <em>Gestionnaire de
1247 contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1251 <td>Arrête le processus de réécriture immédiatement et n'applique
1252 plus aucune règle. Prêtez une attention particulière aux mises
1253 en garde concernant les contextes de niveau répertoire et
1254 .htaccess (voir aussi le drapeau END). <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1258 <td>Réexécute le processus de réécriture à partir de la première
1259 règle, en utilisant le résultat du jeu de règles, sous réserve
1260 qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails
1265 <td>Rend la comparaison entre modèles insensible à la casse.
1266 <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1269 <td>noescape|NE</td>
1270 <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1271 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>
1274 <td>nosubreq|NS</td>
1275 <td>La règle est sautée si la requête courante est une
1276 sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1280 <td>Force l'envoi en interne de l'URL de substitution en tant
1281 que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails
1285 <td>passthrough|PT</td>
1286 <td>L'URI résultant est repassé au moteur de mise en
1287 correspondance des URLs pour y être traité par d'autres
1288 traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1289 <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1292 <td>qsappend|QSA</td>
1293 <td>Ajoute toute chaîne de paramètres créée dans la cible de
1294 réécriture à toute chaîne de paramètres présente dans l'URL de la
1295 requête originale. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1298 <td>qsdiscard|QSD</td>
1299 <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails
1303 <td>redirect|R[=<em>code</em>]</td>
1304 <td>Force une redirection externe, avec un code de statut HTTP
1305 optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em>
1310 <td>Arrête le processus de réécriture immédiatement et
1311 n'applique plus aucune règle. Empêche aussi l'exécution
1312 ultérieure de règles de réécriture dans des contextes de
1313 répertoire et des fichiers .htaccess (disponible depuis la
1314 version 2.3.9) <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1317 <td>skip|S=<em>nombre</em></td>
1318 <td>Si la règle courante s'applique, le moteur de réécriture
1319 doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1322 <td>type|T=<em>MIME-type</em></td>
1323 <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
1324 spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1328 <div class="note"><h3>Développement du répertoire home</h3>
1329 <p> Quand la chaîne de substitution commence par quelque chose comme
1330 "/~user" (de manière explicite ou par références arrières), mod_rewrite
1331 développe le répertoire home sans tenir compte de la présence ou de la
1332 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
1334 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1335 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
1338 <p>Voici toutes les combinaisons de substitution et leurs
1339 significations :</p>
1341 <p><strong>Dans la configuration au niveau du serveur principal
1342 (<code>httpd.conf</code>)<br />
1343 pour la requête ``<code>GET
1344 /chemin/infochemin</code>'':</strong><br />
1347 <table class="bordered">
1350 <th>Résultat de la substitution</th>
1354 <td>^/un_chemin(.*) autre_chemin$1</td>
1355 <td>invalide, non supporté</td>
1359 <td>^/un_chemin(.*) autre_chemin$1 [R]</td>
1360 <td>invalide, non supporté</td>
1364 <td>^/un_chemin(.*) autre_chemin$1 [P]</td>
1365 <td>invalide, non supporté</td>
1369 <td>^/un_chemin(.*) /autre_chemin$1</td>
1370 <td>/autre_chemin/info_chemin</td>
1374 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1375 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1379 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1380 <td>sans objet, non supporté</td>
1384 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1385 <td>/autre_chemin/info_chemin</td>
1389 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1390 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1394 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1395 <td>sans objet, non supporté</td>
1399 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1400 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1404 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1405 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1410 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1411 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1415 <p><strong>Dans une configuration de niveau répertoire pour
1416 <code>/chemin</code><br />
1417 (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1418 <code>RewriteBase /chemin</code>)<br />
1419 pour la requête ``<code>GET
1420 /chemin/chemin-local/infochemin</code>'':</strong><br />
1423 <table class="bordered">
1427 <th>Résultat de la substitution</th>
1431 <td>^chemin-local(.*) autre-chemin$1</td>
1432 <td>/chemin/autre-chemin/infochemin</td>
1436 <td>^chemin-local(.*) autre-chemin$1 [R]</td>
1437 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1442 <td>^chemin-local(.*) autre-chemin$1 [P]</td>
1443 <td>n'a pas lieu d'être, non supporté</td>
1447 <td>^chemin-local(.*) /autre-chemin$1</td>
1448 <td>/autre-chemin/infochemin</td>
1452 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1453 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1457 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1458 <td>n'a pas lieu d'être, non supporté</td>
1462 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1463 <td>/autre-chemin/infochemin</td>
1467 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1468 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1472 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1473 <td>n'a pas lieu d'être, non supporté</td>
1477 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1478 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1482 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1483 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1484 (le drapeau [R] est redondant)</td>
1488 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1489 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1497 <div class="bottomlang">
1498 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> |
1499 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p>
1500 </div><div id="footer">
1501 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
1502 <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>