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" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
12 <script src="../style/scripts/prettify.js" type="text/javascript">
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
17 <div id="page-header">
18 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
19 <p class="apache">Serveur Apache HTTP Version 2.5</p>
20 <img alt="" src="../images/feather.gif" /></div>
21 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
23 <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>
24 <div id="page-content">
25 <div id="preamble"><h1>Module Apache mod_rewrite</h1>
27 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> |
28 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p>
30 <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
31 règles permettant de réécrire les URLs des requêtes
33 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
34 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>rewrite_module</td></tr>
35 <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_rewrite.c</td></tr></table>
38 <p>Le module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> utilise un moteur de
39 réécriture à base de règles, basé sur un interpréteur
40 d'expressions rationnelles PCRE, pour réécrire les URLs à la volée. Par
41 défaut, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> met en correspondance une URL
42 avec le système de fichiers. Cependant, on peut aussi l'utiliser
43 pour rediriger une URL vers une autre URL, ou pour invoquer une
44 requête interne à destination du mandataire.</p>
45 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> fournit une méthode souple et
46 puissante pour manipuler les URLs en utilisant un nombre illimité
47 de règles. Chaque règle peut être associée à un nombre illimité de
48 conditions, afin de vous permettre de réécrire les URLs en
49 fonction de variables du serveur, de variables d'environnement,
50 d'en-têtes HTTP, ou de repères temporels.</p>
51 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> agit sur la totalité de l'URL, y
52 compris la partie chemin. Une règle de réécriture peut être
53 invoquée dans <code>httpd.conf</code> ou dans un fichier
54 <code>.htaccess</code>. Le chemin généré par une règle de
55 réécriture peut inclure une chaîne de paramètres, ou peut renvoyer
56 vers un traitement secondaire interne, une redirection vers une
57 requête externe ou vers le mandataire interne.</p>
59 <p>Vous trouverez d'avantage de détails, discussions et exemples
61 <a href="../rewrite/">documentation détaillée
62 sur mod_rewrite</a>.</p>
64 <div id="quickview"><h3 class="directives">Directives</h3>
66 <li><img alt="" src="../images/down.gif" /> <a href="#rewritebase">RewriteBase</a></li>
67 <li><img alt="" src="../images/down.gif" /> <a href="#rewritecond">RewriteCond</a></li>
68 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteengine">RewriteEngine</a></li>
69 <li><img alt="" src="../images/down.gif" /> <a href="#rewritemap">RewriteMap</a></li>
70 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteoptions">RewriteOptions</a></li>
71 <li><img alt="" src="../images/down.gif" /> <a href="#rewriterule">RewriteRule</a></li>
75 <li><img alt="" src="../images/down.gif" /> <a href="#logging">Journalisation</a></li>
76 </ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
77 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
79 <h2><a name="logging" id="logging">Journalisation</a></h2>
81 <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> offre une journalisation détaillée
82 de ses actions aux niveaux de journalisation <code>trace1</code> à
83 <code>trace8</code>. Le niveau de journalisation peut être défini de
84 manière spécifique à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> via la directive
85 <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> : jusqu'au niveau
86 <code>debug</code> aucune action n'est journalisée, alors qu'elles
87 le sont pratiquement toutes au niveau <code>trace8</code>.</p>
90 L'utilisation d'un niveau de journalisation élevé pour
91 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> va ralentir votre serveur HTTP Apache
92 de manière dramatique ! N'utilisez un niveau de journalisation
93 supérieur à <code>trace2</code> qu'à des fins de débogage !
96 <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">
97 LogLevel alert rewrite:trace3
101 <div class="note"><h3>RewriteLog</h3>
102 <p>Ceux qui sont familiers avec les versions précédentes de
103 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vont probablement rechercher en vain les
104 directives <code>RewriteLog</code> et
105 <code>RewriteLogLevel</code>. Elles ont été en effet remplacées
106 par une configuration de la journalisation par module, comme
110 <p>Pour extraire les traces spécifiques à
111 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, affichez le fichier journal en
112 redirigeant la sortie vers grep :</p>
113 <div class="example"><p><code>
114 tail -f error_log|fgrep '[rewrite:'
119 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
120 <div class="directive-section"><h2><a name="RewriteBase" id="RewriteBase">RewriteBase</a> <a name="rewritebase" id="rewritebase">Directive</a></h2>
121 <table class="directive">
122 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'URL de base pour les réécritures au niveau
124 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteBase <em>chemin URL</em></code></td></tr>
125 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Pas de valeur par défaut</code></td></tr>
126 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
127 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
128 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
129 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
131 <p>La directive <code class="directive">RewriteBase</code> permet de
132 spécifier le préfixe d'URL à utiliser dans un contexte de
133 répertoire (htaccess) pour les directives
134 <code class="directive">RewriteRule</code> qui réécrivent vers un chemin
136 <p>Cette directive est <em>obligatoire</em> si vous utilisez un
137 chemin relatif dans une substitution, et dans un contexte de
138 répertoire (htaccess), sauf si au moins une de ces conditions est
141 <li>La requête initiale, ainsi que la substitution, sont dans
142 la <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> (c'est à
143 dire que pour y accéder, il n'est pas nécessaire d'utiliser
144 une directive telle qu'<code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>).</li>
145 <li>Le chemin du système de fichiers vers le répertoire
146 contenant la <code class="directive">RewriteRule</code>, suffixé par
147 la substitution relative est aussi valide en tant qu'URL sur
148 le serveur (ce qui est rare).</li>
151 <p>Dans l'exemple ci-dessous, la directive
152 <code class="directive">RewriteBase</code> est nécessaire afin d'éviter une
153 réécriture en http://example.com/opt/myapp-1.2.3/welcome.html car la
154 ressource n'était pas relative à la racine des documents. Cette erreur
155 de configuration aurait conduit le serveur à rechercher un répertoire
156 "opt" à la racine des documents.</p>
158 <pre class="prettyprint lang-config">
159 DocumentRoot /var/www/example.com
160 Alias /myapp /opt/myapp-1.2.3
161 <Directory /opt/myapp-1.2.3>
164 RewriteRule ^index\.html$ welcome.html
170 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
171 <div class="directive-section"><h2><a name="RewriteCond" id="RewriteCond">RewriteCond</a> <a name="rewritecond" id="rewritecond">Directive</a></h2>
172 <table class="directive">
173 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une condition qui devra être satisfaite pour que
174 la réécriture soit effectuée
176 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code> RewriteCond
177 <em>chaîne de test</em> <em>expression de comparaison</em></code></td></tr>
178 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
179 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
180 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
181 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
183 <p>La directive <code class="directive">RewriteCond</code> permet de définir une
184 condition d'exécution d'une règle. Une ou plusieurs conditions
185 <code class="directive">RewriteCond</code> peuvent précéder une
186 directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code>. La règle de réécriture correspondante n'est
187 ainsi exécutée que si ces conditions sont satisfaites,
188 <strong>et</strong> si l'URI correspond au modèle spécifié dans la
191 <p><em>TestString</em> est une chaîne qui peut contenir les
192 extensions suivantes en plus du texte simple :</p>
196 <strong>références arrières de règle de réécriture</strong> :
197 ce sont des références arrières de la forme
198 <strong><code>$N</code></strong> (0 <= N <= 9). $1 à $9
199 permettent d'accéder aux parties regroupées (entre
200 parenthèses) du modèle, issues de la <code>RewriteRule</code>
201 concernée par le jeu de conditions <code>RewriteCond</code>
202 courant. $0 donne accès à l'ensemble de la chaîne
203 correspondant au modèle.</li>
205 <strong>Références arrières de condition de réécriture
206 </strong> : ce sont des références arrières de la forme
207 <strong><code>%N</code></strong> (0 <= N <= 9). %1 à %9
208 permettent d'accéder aux parties regroupées (entre
209 parenthèses) du modèle, issues de la <code>RewriteRule</code>
210 concernée par le jeu de conditions <code>RewriteCond</code>
211 courant. %0 donne accès à l'ensemble de la chaîne
212 correspondant au modèle.</li>
214 <strong>extensions de table de réécriture</strong> :
215 ce sont des extensions de la forme <strong><code>${nomTable:clé|défaut}</code></strong>. Voir la <a>href="#mapfunc">documentation sur RewriteMap</a>
216 pour plus de détails.
219 <strong>Variables du serveur</strong> :
220 ce sont des variables de la forme
221 <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
222 où <em>NOM_DE_VARIABLE</em> peut contenir une chaîne issue
223 de la liste suivante :
228 <th>En-têtes HTTP :</th> <th>connexion & requête:</th> <th />
233 HTTP_USER_AGENT<br />
238 HTTP_PROXY_CONNECTION<br />
249 SCRIPT_FILENAME<br />
259 <th>variables internes au serveur :</th> <th>date et heure :</th> <th>spéciaux :</th>
269 SERVER_PROTOCOL<br />
270 SERVER_SOFTWARE<br />
288 REQUEST_FILENAME<br />
296 <p>Ces variables correspondent toutes aux en-têtes MIME
297 HTTP de mêmes noms, au variables C du serveur HTTP Apache, ou
298 aux champs <code>struct tm</code> du système Unix. La
299 plupart d'entre elles sont documentées ailleurs dans le
300 manuel ou dans la spécification CGI.</p>
302 <p>SERVER_NAME et SERVER_PORT dépendent respectivement
303 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>
305 <p>Parmi les variables
306 spécifiques à mod_rewrite, ou trouve les suivantes :</p>
309 <dt><code>IS_SUBREQ</code></dt>
311 <dd>Contient le texte "true" si la requête en cours
312 de traitement est une sous-requête, "false" dans le
313 cas contraire. Une sous-requête est générée quand un
314 module a besoin de se référer à des fichiers ou URIs
315 addidionnels pour pouvoir mener à bien sa tâche.</dd>
317 <dt><code>API_VERSION</code></dt>
319 <dd>C'est la version de l'API des modules Apache httpd
320 (l'interface interne entre le serveur et les modules)
321 pour la construction courante de httpd, telle qu'elle
322 est définie dans include/ap_mmn.h. La version de l'API
323 des modules correspond à la version du serveur Apache
325 utilisé (par exemple, pour la version 1.3.14 d'Apache
327 il s'agit de la version 19990320:10), mais intéresse
328 principalement les auteurs de modules.</dd>
330 <dt><code>THE_REQUEST</code></dt>
332 <dd>La ligne de requête HTTP complète envoyée par le
333 navigateur au serveur (par exemple, "<code>GET
334 /index.html HTTP/1.1</code>"), à l'exclusion de tout
335 en-tête ajouté par le navigateur. Cette
336 valeur n'a pas été déséchappée (décodée), à la
337 différence de la plupart des variables suivantes.</dd>
339 <dt><code>REQUEST_URI</code></dt>
341 <dd>La partie chemin de l'URI de la requête, comme
342 "/index.html". En particulier, ceci exclut la chaîne
343 de paramètres qui est quant à elle disponible via sa
344 propre variable <code>QUERY_STRING</code>.</dd>
346 <dt><code>REQUEST_FILENAME</code></dt>
348 <dd>Le chemin complet local au système de fichiers
349 du fichier ou du script correspondant
350 à la requête, s'il a déjà été déterminé par le serveur
351 au moment où on y fait référence. Dans le cas
352 contraire, et en particulier dans le cas d'un serveur
353 virtuel, <code>REQUEST_FILENAME</code> contient la
354 valeur de <code>REQUEST_URI</code>. En fonction de la
355 valeur de la directive <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code>, le serveur
356 peut n'utiliser que certains éléments de tête du
357 <code>REQUEST_URI</code> pour déterminer à quel
358 fichier correspond la requête.</dd>
360 <dt><code>HTTPS</code></dt>
362 <dd>Contient le texte "on" si la connexion
363 utilise SSL/TLS, "off" dans le cas contraire
364 (Cette variable peut être utilisée sans problème, que
365 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non.</dd>
367 <dt><code>REQUEST_SCHEME</code></dt>
369 <dd>Contient le protocole de la requête (en général
370 "http" ou "https"). La valeur peut être modifiée par
371 la directive <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>.</dd>
378 <p>Si la <em>chaîne de test</em> contient la valeur spéciale
379 <code>expr</code>, <em>expression de comparaison</em> sera traité
380 en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>. Si des en-têtes HTTP sont
381 référencés dans l'expression rationnelle, et si le drapeau
382 <code>novary</code> n'est pas activé, ils seront ajoutés à
385 <p>Autres points à connaître ::</p>
388 <p>Les variables <code>SCRIPT_FILENAME</code> et
389 <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
390 du champ <code>filename</code> de la
391 structure interne <code>request_rec</code>du serveur HTTP Apache.
392 Le premier nom correspond au nom de variable bien connu CGI,
393 alors que le second est l'équivalent de REQUEST_URI (qui
394 contient la valeur du champ <code>uri</code> de
395 <code>request_rec</code>).</p>
396 <p>Si une substitution intervient et si la réécriture se
397 poursuit, la valeur des deux variables sera mise à jour en
399 <p>Dans le contexte du serveur principal (c'est à dire avant que
400 la requête ne soit mise en correspondance avec le système de
401 fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
402 contenir le chemin entier dans le système de fichiers local car
403 ce chemin b'est pas connu à ce stade du traitement. Dans ce cas,
404 les deux variables contiendront la valeur de REQUEST_URI. Pour
405 obtenir le chemin complet de la requête dans le système de
406 fichiers local dans le contexte du serveur principal, utilisez une
407 référence avant à base d'URL
408 <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la valeur
409 finale de REQUEST_FILENAME.</p></li>
413 <code>%{ENV:<em>variable</em>}</code>, où <em>variable</em> peut
414 correspondre à une variable d'environnement quelconque.</li>
416 <code>%{ENV:variable}</code> est aussi disponible, où
417 <em>variable</em> peut correspondre à toute variable
418 d'environnement. Peut être consulté via des structures internes
419 d'Apache httpd et (si on ne les trouve pas ici) via la fonction
420 <code>getenv()</code> à partir du processus du serveur Apache
423 <li>Que <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non, on peut
424 utiliser <code>%{SSL:variable}</code>, où <em>variable</em>
425 peut être remplacé par le nom d'une
426 <a href="mod_ssl.html#envvars">variable
427 d'environnement SSL</a> . Si <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> n'est pas
428 chargé, cette variable contiendra toujours une chaîne vide.
429 Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
430 contenir la valeur <code>128</code>.</li>
433 On peut utiliser <code>%{HTTP:en-tête}</code>, où
434 <em>en-tête</em> peut correspondre à tout nom d'en-tête MIME
435 HTTP, pour extraire la valeur d'un en-tête envoyé dans la
436 requête HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
437 contiendra la valeur de l'en-tête HTTP
438 "<code>Proxy-Connection:</code>".
439 Si on utilise un en-tête HTTP
440 dans une condition, et si cette condition est évaluée à
441 <code>vrai</code> pour la requête, cet en-tête sera ajouté à l'en-tête Vary de
442 la réponse. Il ne le sera pas si la condition est évaluée à
443 <code>faux</code>. L'ajout de l'en-tête HTTP à l'en-tête Vary
444 est nécessaire à une mise en cache appropriée.
445 <p>Il faut garder à l'esprit que les conditions suivent une
446 logique de cout-circuit si le drapeau
447 '<strong><code>ornext|OR</code></strong>' est utilisé, et que de
448 ce fait, certaines d'entre elles ne seront pas évaluées.</p>
451 <li>A des fins de référence avant, on peut utiliser,
452 <a id="LA-U" name="LA-U"><code>%{LA-U:variable}</code></a>, qui
453 permet d'effectuer une sous-requête interne à base d'URL, afin
454 de déterminer la valeur finale de <em>variable</em>. Ceci permet
455 d'accéder à la valeur d'une variable pour la réécriture inconnue
456 à ce stade du traitement, mais qui sera définie au
457 cours d'une phase ultérieure.
458 <p>Par exemple, pour effectuer une réécriture dépendant de la
459 variable <code>REMOTE_USER</code> dans le contexte du serveur
460 principal (fichier <code>httpd.conf</code>), vous devez utiliser
461 <code>%{LA-U:REMOTE_USER}</code> - cette variable est définie
462 par la phase d'autorisation qui intervient <em>après</em> la
463 phase de traduction d'URL (pendant laquelle mod_rewrite opère).</p>
464 <p>Par contre, comme mod_rewrite implémente son contexte de
465 répertoire (fichier <code>.htaccess</code>) via la phase Fixup
466 de l'API, et comme la phase d'autorisation intervient
467 <em>avant</em> cette dernière, vous pouvez vous contenter
468 d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
471 <code>%{LA-F:variable}</code> peut être utilisée pour effectuer
472 une sous-requête interne (basée sur le nom de fichier), afin de
473 déterminer la valeur finale de <em>variable</em>. La plupart du
474 temps, elle est identique à LA-U (voir ci-dessus).</li>
478 <p><em>expression de comparaison</em> est une expression
479 rationnelle qui est appliquée à l'instance actuelle de
480 <em>chaîne de test</em>. <em>chaîne de test</em> est d'abord
481 évaluée, puis comparée à
482 l'<em>expression de comparaison</em>.</p>
484 <p><em>expression de comparaison</em> est en général une
485 <em>expression rationnelle compatible perl</em>, mais vous
486 disposez des syntaxes supplémentaires suivantes pour effectuer
487 d'autres tests utiles sur <em>chaîne de test</em> :
491 <li>Vous pouvez préfixer l'expression avec un caractère
492 '<code>!</code>' (point d'exclamation) pour indiquer une
493 expression de <strong>non</strong>-correspondance.</li>
495 <li>Vous pouvez effectuer des comparaisons lexicographiques de
499 <li>'<strong><expression</strong>' (infé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 inférieure au sens
505 lexicographique à l'<em>expression</em>.</li>
507 <li>'<strong>>expression</strong>' (supérieur 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 supérieure au sens
513 lexicographique à l'<em>expression</em>.</li>
515 <li>'<strong>=expression</strong>' (égal au sens
516 lexicographique)<br />
517 Traite l'<em>expression</em> comme une chaîne de
518 caractères et la compare lexicographiquement à
519 <em>chaîne de test</em>. La condition est satisfaite si
520 <em>chaîne de test</em> est égale au sens
521 lexicographique à l'<em>expression</em> (les deux chaînes
522 sont exactement identiques, caractère pour caractère). Si
523 <em>expression</em> est <code>""</code> (deux guillemets),
524 <em>chaîne de test</em> est comparée à la chaîne vide.</li>
526 <li>'<strong><=expression de comparaison</strong>' (inférieur ou égal à
527 au sens lexicographique)<br />
528 Considère l'<em>expression de comparaison</em> comme une
529 chaîne de caractères et la compare au sens lexicographique à
530 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
531 précède lexicographiquement <em>expression de comparaison</em>, ou est
532 égale à <em>expression de comparaison</em> (les deux chaînes
533 sont identiques, caractère pour caractère).</li>
535 <li>'<strong>>=expression de comparaison</strong>'
536 (supérieur ou égal à au sens lexicographique)<br />
537 Considère l'<em>expression de comparaison</em> comme une
538 chaîne de caractères et la compare au sens lexicographique à
539 la <em>chaîne de test</em>. Vrai si <em>chaîne de test</em>
540 suit lexicographiquement <em>expression de comparaison</em>, ou est
541 égale à <em>expression de comparaison</em> (les deux chaînes
542 sont identiques, caractère pour caractère).</li>
546 Vous pouvez effectuer des comparaisons d'entiers :
549 <li>'<strong>-eq</strong>' (est numériquement égal à)<br />
550 La <em>chaîne de test</em> est considérée comme un entier,
551 et est comparée numériquement à l'<em>expression de
552 comparaison</em>. Vrai si les deux expressions sont
553 numériquement égales.</li>
555 <li>'<strong>-ge</strong>' (est numériquement supérieur ou
557 La <em>chaîne de test</em> est considérée comme un entier,
558 et est comparée numériquement à l'<em>expression de
559 comparaison</em>. Vrai si <em>chaîne de test</em> est
561 supérieure ou égale à <em>expression de comparaison</em>.</li>
563 <li>'<strong>-gt</strong>' (est numériquement supérieur à)<br />
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 supérieure à <em>expression de comparaison</em>.</li>
570 <li>'<strong>-le</strong>' (est numériquement inférieur ou
572 La <em>chaîne de test</em> est considérée comme un entier,
573 et est comparée numériquement à l'<em>expression de
574 comparaison</em>. Vrai si <em>chaîne de test</em> est
576 inférieure ou égale à <em>expression de comparaison</em>.
577 Attention à la confusion avec le drapeau <strong>-l</strong>
578 en utilisant la variante the <strong>-L</strong> ou
579 <strong>-h</strong>.</li>
581 <li>'<strong>-lt</strong>' (est numériquement inférieur à)<br />
582 La <em>chaîne de test</em> est considérée comme un entier,
583 et est comparée numériquement à l'<em>expression de
584 comparaison</em>. Vrai si <em>chaîne de test</em> est
586 inférieure à <em>expression de comparaison</em>.
587 Attention à la confusion avec le drapeau <strong>-l</strong>
588 en utilisant la variante the <strong>-L</strong> ou
589 <strong>-h</strong>.</li>
594 <li>Vous pouvez effectuer différents tests sur les attributs de
598 <li>'<strong>-d</strong>' (est un répertoire -
599 <strong>d</strong>irectory)<br />
600 Traite <em>chaîne de test</em> comme un chemin et vérifie
601 s'il existe ou pas, et s'il s'agit d'un répertoire.</li>
603 <li>'<strong>-f</strong>' (est un
604 <strong>f</strong>ichier régulier)<br />
605 Traite <em>chaîne de test</em> comme un chemin et vérifie
606 s'il existe ou pas, et s'il s'agit d'un fichier régulier.</li>
608 <li>'<strong>-F</strong>' (test de l'existence d'un fichier
609 via une sous-requête)<br />
610 Vérifie si <em>chaîne de test</em> est un fichier valide,
611 accessible à travers tous les contrôles d'accès du serveur
612 actuellement configurés pour ce chemin. C'est une
613 sous-requête interne qui effectue cette vérification - à
614 utiliser avec précautions car les performances du serveur
615 peuvent s'en trouver affectées !</li>
617 <li>'<strong>-H</strong>' (est un lien symbolique, selon la
618 convention bash)<br />
619 Voir <strong>-l</strong>.</li>
621 <li>'<strong>-l</strong>' (est un lien symbolique)<br />
622 Considère la <em>chaîne de test</em> comme un chemin et
623 vérifie son existence et si elle est un lien symbolique. On
624 peut aussi utiliser la convention bash <strong>-L</strong>
625 ou <strong>-h</strong> lorsqu'il y a risque de confusion
626 avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</li>
628 <li>'<strong>-L</strong>' (est un lien symbolique, selon la
629 convention bash)<br />
630 Voir <strong>-l</strong>.</li>
632 <li>'<strong>-s</strong>' (est un fichier régulier d'une
633 certaine taille)<br />
634 Considère la <em>chaîne de test</em> comme un chemin et
635 vérifie son existence et si elle est un fichier régulier
636 d'une taille supérieure à zéro.</li>
638 <li>'<strong>-U</strong>' (test de l'existence d'une
639 <strong>U</strong>RL via une sous-requête)<br />
640 Vérifie si <em>chaîne de test</em> est une URL valide,
641 accessible à travers tous les contrôles d'accès du serveur
642 actuellement configurés pour ce chemin. C'est une
643 sous-requête interne qui effectue cette vérification - à
644 utiliser avec précautions car les performances du serveur
645 peuvent s'en trouver affectées !</li>
647 <li>'<strong>-x</strong>' (a l'attribut d'exécution positionné)<br />
648 Considère la <em>chaîne de test</em> comme un chemin et
649 vérifie son existence et si elle a son attribut d'exécution
650 positionné. Ce positionnement est déterminé en fonction de
651 l'OS sous-jacent.</li>
655 <div class="note"><h3>Note :</h3>
656 Tous ces tests peuvent aussi être préfixés par un point
657 d'exclamation ('!') pour inverser leur signification.
662 <p>Si la <em>chaîne de test</em> contient la valeur spéciale
663 <code>expr</code>, la <em>chaîne de comparaison</em> sera
664 traitée en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>.</p>
667 Dans l'exemple ci-dessous, on utilise <code>-strmatch</code>
668 pour comparer le <code>REFERER</code> avec le nom d'hôte du
669 site afin de bloquer le hotlinking (référencement direct)
673 <pre class="prettyprint lang-config">
674 RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"<br />
675 RewriteRule ^/images - [F]
680 <li>Vous pouvez aussi définir certains drapeaux pour
681 l'<em>expression de comparaison</em> en ajoutant ces
682 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
683 comme troisième argument de la directive
684 <code>RewriteCond</code>, où <em>drapeaux</em> est un
685 sous-ensemble séparé par des virgules des drapeaux suivants :
688 <li>'<strong><code>nocase|NC</code></strong>'
689 (<strong>n</strong>o <strong>c</strong>ase)<br />
690 Rend le test insensible à la casse - il n'est pas fait de
691 distinction entre majuscules et minuscules, à la fois dans le
692 développement de <em>chaîne de test</em> et dans
693 <em>expression de comparaison</em>. Ce drapeau n'est pris en
694 compte que lors d'une comparaison entre <em>chaîne de test</em>
695 et <em>expression de comparaison</em>. Il ne l'est pas pour les
696 vérification par sous-requêtes ou sur le système de
700 '<strong><code>ornext|OR</code></strong>'
701 (<strong>ou</strong> condition suivante)<br />
702 Permet de chaîner les conditions de règles avec un OU au
703 lieu du AND implicite. Exemple typique :
705 <pre class="prettyprint lang-config">
706 RewriteCond %{REMOTE_HOST} ^host1 [OR]
707 RewriteCond %{REMOTE_HOST} ^host2 [OR]
708 RewriteCond %{REMOTE_HOST} ^host3
709 RewriteRule ...règles concernant tous ces hôtes...
713 Sans ce drapeau, les paires
714 condition/règle devraient être écrites trois fois.
717 <li>'<strong><code>novary|NV</code></strong>'
718 (<strong>n</strong>o <strong>v</strong>ary)<br />
719 Si la condition contient un en-tête HTTP, ce drapeau empêche
720 ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br />
721 L'utilisation de ce drapeau peut provoquer une mise en cache
722 incorrecte de la réponse, si la représentation de cette réponse
723 varie avec la valeur de l'en-tête considéré. Ce drapeau ne
724 devrait donc être utilisé que si l'on maîtrise parfaitement le
725 fonctionnement de l'en-tête Vary.
731 <p><strong>Exemple :</strong></p>
733 <p>Pour réécrire la page d'accueil d'un site en fonction de
734 l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
735 pouvez utiliser ce qui suit : </p>
737 <pre class="prettyprint lang-config">
738 RewriteCond %{HTTP_USER_AGENT} (iPhone|Blackberry|Android)
739 RewriteRule ^/$ /homepage.mobile.html [L]
741 RewriteRule ^/$ /homepage.std.html [L]
745 <p>Explications : si vous utilisez un navigateur
746 qui s'identifie comme un
747 navigateur de plateforme mobile (notez que l'exemple est
748 incomplet car il existe de nombreuses autres plateformes
749 mobiles), c'est la version pour mobile de la page d'accueil qui
750 sera renvoyée. Dans le cas contraire, ce sera la page d'accueil
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>Plutôt que de commenter toutes les directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code>, il est préférable
775 d'utiliser cette directive si l'on souhaite désactiver les
776 règles de réécriture dans un contexte particulier.</p>
778 <p>Notez que les hôtes virtuels n'héritent pas des
779 configurations de réécriture. Ceci implique que vous devez
780 insérer une directive <code>RewriteEngine on</code> dans chaque
781 hôte virtuel pour lequel vous souhaitez utiliser des règles
784 <p>Les directives <code class="directive">RewriteMap</code> du type
785 <code>prg</code> ne sont pas prises en compte au cours de
786 l'initialisation du serveur si elle ont été définies dans un
787 contexte où la directive <code class="directive">RewriteEngine</code> n'a
788 pas été définie à <code>on</code>.</p>
792 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
793 <div class="directive-section"><h2><a name="RewriteMap" id="RewriteMap">RewriteMap</a> <a name="rewritemap" id="rewritemap">Directive</a></h2>
794 <table class="directive">
795 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une fonction de mise en correspondance pour la
796 recherche de mots-clés</td></tr>
797 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteMap <em>nom de la correspondance</em> <em>type de
798 correspondance</em>:<em>source de la correspondance</em>
800 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
801 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
802 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
804 <p>La directive <code class="directive">RewriteMap</code> définit une
805 <em>Table de correspondance pour la réécriture</em> que les
806 fonctions de mise en correspondance
807 peuvent utiliser dans les chaînes de substitution des règles
808 pour insérer/substituer des champs en recherchant des mots-clés.
809 La source utilisée pour cette recherche peut être de plusieurs
812 <p><a id="mapfunc" name="mapfunc"><em>nom de la
813 correspondance</em></a> est le nom de la table de correspondance
814 et servira à spécifier une fonction de mise en correspondance
815 pour les chaînes de substitution d'une règle de réécriture selon
816 une des constructions suivantes :</p>
819 <strong><code>${</code> <em>nom de la
820 correspondance</em> <code>:</code>
821 <em>mot-clé</em> <code>}</code><br />
822 <code>${</code> <em>nom de la
823 correspondance</em> <code>:</code>
824 <em>mot-clé</em> <code>|</code> <em>valeur par défaut</em>
825 <code>}</code></strong>
828 <p>Lorsqu'une telle construction est rencontrée, la table de
829 correspondance <em>Nom de la correspondance</em> est consultée
830 et la clé <em>mot-clé</em> recherchée. Si la clé est trouvée, la
831 construction est remplacée par
832 la <em>valeur de remplacement</em>. Si la clé n'est pas trouvée,
833 elle est remplacée par la <em>valeur par défaut</em>, ou par une
834 chaîne vide si aucune <em>valeur par défaut</em> n'est
835 spécifiée. La valeur vide se comporte comme si la
836 clé était absente ; il est donc impossible de distinguer une
837 valeur vide d'une absence de clé.</p>
839 <p>Par exemple, vous pouvez définir une directive
840 <code class="directive">RewriteMap</code> comme suit </p>
842 <pre class="prettyprint lang-config">
843 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 <pre class="prettyprint lang-config">
851 RewriteRule ^/ex/(.*) ${map-exemple:$1}
855 <p>Les combinaisons suivantes pour <em>type de correspondance</em>
856 et <em>source de la correspondance</em>
857 peuvent être utilisées :</p>
861 <dd>Un fichier texte contenant des paires clé-valeur séparées
862 par des espaces, une paire par ligne (<a href="../rewrite/rewritemap.html#txt">Détails ...</a>).</dd>
865 <dd>Sélection aléatoire d'une entrée depuis un fichier texte (<a href="../rewrite/rewritemap.html#rnd">Détails ...</a>).</dd>
868 <dd>Recherche une entrée dans un fichier dbm contenant des
869 paires nom-valeur. Le condensé hash est élaboré à partir d'un
870 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>
873 <dd>Une des quatre fonctions internes disponibles que fournit
874 <code>RewriteMap</code>: toupper, tolower, escape ou unescape
875 (<a href="../rewrite/rewritemap.html#int">Détails ...</a>).</dd>
878 <dd>Appelle un programme externe ou un script pour effectuer la
879 réécriture (<a href="../rewrite/rewritemap.html#int">Détails
882 <dt>dbd or fastdbd</dt>
883 <dd>Une commande SQL SELECT à exécuter pour rechercher la cible
884 de réécriture (<a href="../rewrite/rewritemap.html#int">Détails
888 <p>Vous trouverez plus de détails et de nombreux exemples dans le <a href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
892 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
893 <div class="directive-section"><h2><a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions" id="rewriteoptions">Directive</a></h2>
894 <table class="directive">
895 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options spéciales
896 pour le moteur de réécriture</td></tr>
897 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
898 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
899 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
900 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
901 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
904 <p>La directive <code class="directive">RewriteOptions</code> définit
905 certaines options spéciales pour la configuration au niveau du
906 serveur ou du répertoire. La chaîne de caractères <em>Option</em>
907 ne peut actuellement prendre qu'une des valeurs suivantes :</p>
910 <dt><code>Inherit</code></dt>
913 <p>Ceci force la configuration locale à hériter de la
914 configuration du niveau supérieur. Dans le contexte des hôtes
915 virtuels, cela signifie que les correspondances, conditions et
916 règles du serveur principal sont héritées. Dans le contexte des
917 répertoires, cela signifie que les conditions et règles de la
918 configuration <code>.htaccess</code> ou les sections <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du répertoire
919 parent sont héritées. Les règles héritées sont virtuellement
920 copiées dans la section où cette directive est utilisée. Si elles
921 sont utilisées avec des règles locales, les règles héritées sont
922 placées après ces dernières. La place de cette directive - avant
923 ou après les règles locales - n'a aucune influence sur ce
924 comportement. Si des règles locales ont forcé l'arrêt de la
925 réécriture, les règles héritées ne seront pas traitées.</p>
927 <div class="warning">
928 Les règles héritées du niveau parent sont appliquées
929 <strong>after</strong> après les règles spécifiées dans le niveau
934 <dt><code>InheritBefore</code></dt>
936 <p>Même effet que l'option <code>Inherit</code> ci-dessus, mais
937 les règles spécifiées dans le niveau parent s'appliquent
938 <strong>avant</strong> les règles spécifiées dans le niveau
939 enfant. Disponible depuis la version 2.3.10 du serveur HTTP
943 <dt><code>AllowNoSlash</code></dt>
945 <p>Par défaut, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ignore les URLs qui
946 correspondent à un répertoire sur disque, mais ne comportent pas
947 de slash final, afin que le module <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>
948 redirige le client vers l'URL canonique avec un slash final.</p>
950 <p>Lorsque la directive <code class="directive"><a href="../mod/mod_dir.html#directoryslash">DirectorySlash</a></code> est définie à off, il
951 est possible de spécifier l'option <code>AllowNoSlash</code> pour
952 s'assurer que les règles de réécriture ne soient plus ignorées.
953 Si on le souhaite, cette option permet de faire s'appliquer des
954 règles de réécriture qui correspondent à un répertoire sans slash
955 final au sein de fichiers .htaccess. Elle est disponible à
956 partir de la version 2.4.0 du serveur HTTP Apache.</p>
959 <dt><code>AllowAnyURI</code></dt>
962 <p>A partir de la version 2.2.22 de httpd, lorsqu'une directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code> se situe dans un
963 contexte de <code>serveur virtuel</code> ou de serveur principal,
964 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ne traitera les règles de réécriture
965 que si l'URI de la requête respecte la syntaxe d'un <a href="./directive-dict.html#Syntax">chemin URL</a>. Ceci permet
966 d'éviter certains problèmes de sécurité où des règles
967 particulières pourraient permettre des développements de modèles
968 inattendus (voir <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3368">CVE-2011-3368</a>
969 et <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4317">CVE-2011-4317</a>).
970 Pour s'affranchir de la restriction relative à la syntaxe des chemins URL, on peut
971 utiliser l'option <code>AllowAnyURI</code>, afin de permettre à
972 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> d'appliquer le jeu de règles à toute
973 chaîne de requête URI, sans vérifier si cette dernière respecte la
974 grammaire des chemins URL définie dans la spécification HTTP.</p>
976 <div class="warning">
977 <h3>Avertissement à propos de la sécurité</h3>
979 <p>L'utilisation de cette option rendra le serveur vulnérable à
980 certains problèmes de sécurité si les règles de réécritures
981 concernées n'ont pas été rédigées avec soin. Il est par conséquent
982 <strong>fortement recommandé</strong> de ne pas utiliser cette
983 option. En particulier, prêtez attention aux chaînes en entrée contenant le
984 caractère '<code>@</code>', qui peuvent modifier l'interprétation
985 de l'URI réécrite, comme indiqué dans les liens ci-dessus.</p>
989 <dt><code>MergeBase</code></dt>
992 <p>Avec cette option, la valeur de la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code> est recopiée depuis
993 une valeur explicitement définie dans tout sous-répertoire qui ne
994 définit pas sa propre directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code>. Disponible à partir
995 de la version 2.5 du serveur HTTP Apache.</p>
1001 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1002 <div class="directive-section"><h2><a name="RewriteRule" id="RewriteRule">RewriteRule</a> <a name="rewriterule" id="rewriterule">Directive</a></h2>
1003 <table class="directive">
1004 <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>
1005 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
1006 <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
1007 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
1008 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
1009 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
1010 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
1012 <p>La directive <code class="directive">RewriteRule</code> est le
1013 véritable cheval de trait de la réécriture. La directive peut
1014 apparaître plusieurs fois, chaque instance définissant une
1015 règle de réécriture particulière. L'ordre dans lequel ces règles
1016 sont définies est important - il s'agit de l'ordre dans lequel
1017 les règles seront appliquées au cours du processus de
1020 <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
1021 <a id="regexp" name="regexp">expression rationnelle</a>
1022 compatible perl. Dans la première règle de réécriture,
1023 l'expression est comparée au (%-decoded)
1024 <a href="./directive-dict.html#Syntax">chemin de l'URL</a> (ou au
1025 <a href="./directive-dict.html#Syntax">chemin fichier</a>, en
1026 fonction du contexte) de la
1027 requête. Les expressions suivantes sont comparées à la sortie de
1028 la dernière règle de réécriture qui
1031 <div class="note"><h3><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est comparé ?</a></h3>
1033 <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
1034 d'abord comparé à la portion de l'URL située entre le nom d'hôte
1035 éventuellement accompagné du port, et la chaîne de paramètres (par
1036 exemple "/app1/index.html").</p>
1038 <p>Dans les contextes de répertoire <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> et htaccess, le
1039 <em>modèle</em> est tout d'abord comparé au chemin du <em>système
1040 de fichiers</em>, après suppression du préfixe ou chemin de base
1041 ayant conduit le serveur vers la règle <code class="directive">RewriteRule</code> (par
1042 exemple "app1/index.html" ou
1043 "index.html" selon l'endroit où les directives sont définies).</p>
1045 <p>Si vous souhaitez faire une comparaison sur le nom
1046 d'hôte, le port, ou la chaîne de requête, utilisez une
1047 directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
1048 comportant respectivement les variables
1049 <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
1050 <code>%{QUERY_STRING}</code>.</p>
1053 <div class="note"><h3>Réécritures dans un contexte de répertoire</h3>
1055 <li>L'utilisation du moteur de réécriture dans les
1056 fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections
1057 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> est un peu plus
1060 <li>Pour activer le moteur de réécriture dans ces contextes, vous devez
1061 définir "<code>RewriteEngine On</code>" <strong>et</strong>
1062 "<code>Options FollowSymLinks</code>". Si l'administrateur a désactivé
1063 la possibilité de modifier l'option <code>FollowSymLinks</code> au
1064 niveau du répertoire d'un utilisateur, vous ne pouvez pas utiliser le
1065 moteur de réécriture. Cette restriction a été instaurée à des fins de
1068 <li>Lorsqu'on utilise le moteur de réécriture dans un fichier
1069 <code>.htaccess</code>, le chemin de base du répertoire courant (qui est
1070 toujours le même pour ce même répertoire) est automatiquement
1071 <em>supprimé</em> au cours de la comparaison avec le modèle de la règle
1072 de réécriture, et automatiquement <em>ajouté</em> lorsqu'une
1073 substitution relative (ne débutant pas par un slash ou un nom de
1074 protocole) arrive à la fin d'un jeu de règles. Voir la directive
1075 <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de
1076 détails à propos de l'ajout du préfixe après les substitutions
1079 <li>Si vous souhaitez effectuer une comparaison en prenant en compte
1081 chemin de l'URL dans un contexte de répertoire (htaccess), vous devez
1082 utiliser la variable <code>%{REQUEST_URI}</code> dans la directive
1083 <code class="directive">RewriteCond</code>.</li>
1085 <li>Le prefixe supprimé se termine toujours par un slash, ce qui
1086 signifie que la comparaison s'effectue avec une chaîne qui ne comporte
1087 <em>jamais</em> de slash de début. Ainsi, un <em>modèle</em> contenant
1088 <code>^/</code> ne correspondra jamais dans un contexte de répertoire.</li>
1090 <li>Bien que les règles de réécriture soient permises du point de vue de
1091 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
1092 n'y sont à priori d'aucune utilité.</li>
1096 <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
1097 document <a href="../rewrite/intro.html#regex">Introduction à
1098 mod_rewrite</a>.</p>
1100 <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON
1101 ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
1102 d'inverser la signification d'un modèle, soit pour dire
1103 ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
1104 ce modèle</em>''. Le caractère NON peut donc être utilisé à
1105 titre exceptionnel, lorsqu'il est plus simple d'effectuer une
1106 comparaison avec le modèle inversé, ou dans la dernière règle
1109 <div class="note"><h3>Note</h3>
1110 Si vous utilisez le caractère NON pour inverser la signification d'un
1111 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
1112 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
1113 pas (autrement dit, sa négation correspond), les groupes sont vides.
1114 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
1115 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
1119 <p>Dans une règle de réécriture,
1120 <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
1121 de caractères qui remplace le chemin de l'URL original qui
1122 correspondait au <em>Modèle</em>. <em>Substitution</em> peut
1127 <dt>un chemin du système de fichiers</dt>
1129 <dd>Il indique alors la localisation dans le système de
1130 fichiers de la ressource qui doit être envoyée au
1131 client. Les substitutions ne sont traitées en tant que chemins du
1132 système de fichiers que si la règle est configurée dans un
1133 contexte de serveur (serveur virtuel), et si le premier
1134 composant du chemin dans la substitution existe dans le système
1137 <dt>chemin d'URL</dt>
1139 <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
1140 doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1141 essaie de deviner si vous avez spécifié un chemin du système
1142 de fichiers ou un chemin d'URL en vérifiant si la première
1143 partie du chemin existe à la racine du système de fichiers.
1144 Par exemple, si vous avez spécifié comme chaîne de
1145 <em>Substitution</em> <code>/www/file.html</code>, cette
1146 dernière sera traitée comme un chemin d'URL <em>à moins</em>
1147 qu'un répertoire nommé <code>www</code> n'existe à la racine
1148 de votre système de fichiers (ou dans le cas d'une
1149 réécriture au sein d'un fichier <code>.htaccess</code>,
1150 relativement à la racine des documents), auquel cas la chaîne de
1151 substitution sera traitée comme un chemin du système de
1152 fichiers. Si vous désirez que d'autres directives de
1153 correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au
1154 chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
1155 comme décrit ci-dessous.</dd>
1157 <dt>URL absolue</dt>
1159 <dd>Si une URL absolue est spécifiée,
1160 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte
1161 correspond à celui de l'hôte local. Si c'est le cas, le
1162 protocole et le nom d'hôte sont supprimés, et ce qui reste est
1163 traité comme un chemin d'URL. Dans le cas contraire, une
1164 redirection externe vers l'URL indiquée est effectuée. Pour
1165 forcer une redirection externe vers l'hôte local, voir le
1166 drapeau <code>[R]</code> ci-dessous.</dd>
1168 <dt><code>-</code> (tiret)</dt>
1170 <dd>Un tiret indique qu'aucune substitution ne doit être
1171 effectuée (le chemin considéré est transmis sans changement).
1172 Ceci est utile quand un drapeau doit être appliqué sans
1173 modifier le chemin (voir ci-dessous).</dd>
1177 <p>En plus du texte, la chaîne <em>Substition</em> peut
1181 <li>des références arrières (<code>$N</code>) vers le modèle
1182 d'une directive RewriteRule</li>
1184 <li>des références arrières (<code>%N</code>) vers le dernier
1185 modèle d'une directive RewriteCond qui correspondait</li>
1187 <li>des variables du serveur comme dans les chaînes de test de
1188 condition d'une règle (<code>%{VARNAME}</code>)</li>
1191 <a href="#mapfunc">fonctions de comparaison</a>
1192 (<code>${nom correspondance:clé|défaut}</code>)</li>
1195 <p>Les références arrières sont des identificateurs de la forme
1196 <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1197 seront remplacés par le contenu du <strong>N</strong>ème groupe
1198 du <em>Modèle</em> qui correspondait. Les variables du serveur
1199 sont les mêmes que dans la <em>Chaîne de test</em> d'une
1200 directive <code>RewriteCond</code>. Les fonctions de comparaison
1201 sont issues de la directive <code>RewriteMap</code> dans la
1202 section de laquelle elles sont décrites. Ces trois types de
1203 variables sont évaluées dans l'ordre ci-dessus.</p>
1205 <p>Chaque règle de réécriture s'applique au résultat de la règle
1206 précédente, selon l'ordre dans lequel elles ont été définies dans
1207 le fichier de configuration. Le chemin de l'URL ou du système de fichier (voir
1208 ci-dessus <a href="#what_is_matched">Qu'est-ce qui est
1209 comparé ?</a>) est <strong>intégralement
1210 remplacée</strong> par la chaîne de <em>Substitution</em> et le
1211 processus de réécriture se poursuit jusqu'à ce que toutes les
1212 règles aient été appliquées, ou qu'il soit explicitement stoppé
1213 par un drapeau <a href="../rewrite/flags.html#flag_l"><code><strong>L</strong></code></a>,
1214 ou par un autre drapeau qui implique un arrêt immédiat, comme
1215 <code><strong>END</strong></code> ou
1216 <code><strong>F</strong></code>.</p>
1218 <div class="note"><h3>Modifier la chaîne de requête</h3>
1219 <p>Par défaut, la chaîne de requête est transmise sans
1220 modification. Vous pouvez cependant créer dans la chaîne de
1221 substitution des URLs dont une partie constitue une chaîne de
1222 requête. Pour cela, ajoutez simplement un point d'interrogation
1223 dans la chaîne de substitution pour indiquer que le texte qui
1224 suit doit être réinjecté dans la chaîne de requête. Pour
1225 supprimer une chaîne de requête, terminez simplement la chaîne de
1226 substitution par un point d'interrogation. Pour combiner les
1227 nouvelles chaînes de requête avec les anciennes, utilisez le
1228 drapeau <code>[QSA]</code>.</p>
1232 <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1234 <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1235 comme troisième argument de la directive
1236 <code>RewriteRule</code>. Séparés par des virgules au sein d'une
1237 liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1238 être choisis dans la table suivante. Vous trouverez plus de
1239 détails, et des exemples pour chaque drapeau dans le <a href="../rewrite/flags.html">document à propos des drapeaux de
1242 <table class="bordered">
1243 <tr><th>Drapeaux et syntaxe</th>
1248 <td>Echappe les caractères non-alphanumériques <em>avant</em>
1249 d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1253 <td>La règle est chaînée avec la règle suivante. Si la règle
1254 échoue, la ou les règles avec lesquelles elle est est chaînée
1255 seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1258 <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1259 <td>Définit un cookie au niveau du navigateur client. La syntaxe
1261 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>
1262 <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1266 <td>discardpath|DPI</td>
1267 <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails
1271 <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
1272 <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1273 <em>VAL</em> si elle est fournie). La variante !<em>VAR</em>
1274 annule la définition de la variable <em>VAR</em>.<em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1277 <td>forbidden|F</td>
1278 <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1279 <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1283 <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1286 <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1287 <td>L'URI résultant est envoyé au <em>Gestionnaire de
1288 contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1292 <td>Arrête le processus de réécriture immédiatement et n'applique
1293 plus aucune règle. Prêtez une attention particulière aux mises
1294 en garde concernant les contextes de niveau répertoire et
1295 .htaccess (voir aussi le drapeau END). <em><a href="../rewrite/flags.html#flag_end">détails ...</a></em></td>
1299 <td>Réexécute le processus de réécriture à partir de la première
1300 règle, en utilisant le résultat du jeu de règles, sous réserve
1301 qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails
1306 <td>Rend la comparaison entre modèles insensible à la casse.
1307 <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1310 <td>noescape|NE</td>
1311 <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1312 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>
1315 <td>nosubreq|NS</td>
1316 <td>La règle est sautée si la requête courante est une
1317 sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1321 <td>Force l'envoi en interne de l'URL de substitution en tant
1322 que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails
1326 <td>passthrough|PT</td>
1327 <td>L'URI résultant est repassé au moteur de mise en
1328 correspondance des URLs pour y être traité par d'autres
1329 traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1330 <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1333 <td>qsappend|QSA</td>
1334 <td>Ajoute toute chaîne de paramètres présente dans l'URL de la
1335 requête originale à toute chaîne de paramètres créée dans la
1336 cible de réécriture. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1339 <td>qsdiscard|QSD</td>
1340 <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails
1344 <td>redirect|R[=<em>code</em>]</td>
1345 <td>Force une redirection externe, avec un code de statut HTTP
1346 optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em>
1351 <td>Arrête le processus de réécriture immédiatement et
1352 n'applique plus aucune règle. Empêche aussi l'exécution
1353 ultérieure de règles de réécriture dans des contextes de
1354 répertoire et des fichiers .htaccess (disponible depuis la
1355 version 2.3.9) <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1358 <td>skip|S=<em>nombre</em></td>
1359 <td>Si la règle courante s'applique, le moteur de réécriture
1360 doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1363 <td>type|T=<em>MIME-type</em></td>
1364 <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
1365 spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1369 <div class="note"><h3>Développement du répertoire home</h3>
1370 <p> Quand la chaîne de substitution commence par quelque chose comme
1371 "/~user" (de manière explicite ou par références arrières), mod_rewrite
1372 développe le répertoire home sans tenir compte de la présence ou de la
1373 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
1375 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1376 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
1379 <p>Voici toutes les combinaisons de substitution et leurs
1380 significations :</p>
1382 <p><strong>Dans la configuration au niveau du serveur principal
1383 (<code>httpd.conf</code>)<br />
1384 pour la requête ``<code>GET
1385 /chemin/infochemin</code>'':</strong><br />
1388 <table class="bordered">
1391 <th>Résultat de la substitution</th>
1395 <td>^/un_chemin(.*) autre_chemin$1</td>
1396 <td>invalide, non supporté</td>
1400 <td>^/un_chemin(.*) autre_chemin$1 [R]</td>
1401 <td>invalide, non supporté</td>
1405 <td>^/un_chemin(.*) autre_chemin$1 [P]</td>
1406 <td>invalide, non supporté</td>
1410 <td>^/un_chemin(.*) /autre_chemin$1</td>
1411 <td>/autre_chemin/info_chemin</td>
1415 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1416 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1420 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1421 <td>sans objet, non supporté</td>
1425 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1426 <td>/autre_chemin/info_chemin</td>
1430 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1431 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1435 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1436 <td>sans objet, non supporté</td>
1440 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1441 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1445 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1446 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1451 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1452 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1456 <p><strong>Dans une configuration de niveau répertoire pour
1457 <code>/chemin</code><br />
1458 (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1459 <code>RewriteBase /chemin</code>)<br />
1460 pour la requête ``<code>GET
1461 /chemin/chemin-local/infochemin</code>'':</strong><br />
1464 <table class="bordered">
1468 <th>Résultat de la substitution</th>
1472 <td>^chemin-local(.*) autre-chemin$1</td>
1473 <td>/chemin/autre-chemin/infochemin</td>
1477 <td>^chemin-local(.*) autre-chemin$1 [R]</td>
1478 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1483 <td>^chemin-local(.*) autre-chemin$1 [P]</td>
1484 <td>n'a pas lieu d'être, non supporté</td>
1488 <td>^chemin-local(.*) /autre-chemin$1</td>
1489 <td>/autre-chemin/infochemin</td>
1493 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1494 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1498 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1499 <td>n'a pas lieu d'être, non supporté</td>
1503 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1504 <td>/autre-chemin/infochemin</td>
1508 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1509 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1513 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1514 <td>n'a pas lieu d'être, non supporté</td>
1518 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1519 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1523 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1524 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1525 (le drapeau [R] est redondant)</td>
1529 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1530 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1538 <div class="bottomlang">
1539 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> |
1540 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p>
1541 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
1542 <script type="text/javascript"><!--//--><![CDATA[//><!--
1543 var comments_shortname = 'httpd';
1544 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html';
1546 if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
1547 d.write('<div id="comments_thread"><\/div>');
1548 var s = d.createElement('script');
1549 s.type = 'text/javascript';
1551 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
1552 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
1555 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
1557 })(window, document);
1558 //--><!]]></script></div><div id="footer">
1559 <p class="apache">Copyright 2013 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
1560 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
1561 if (typeof(prettyPrint) !== 'undefined') {