]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_rewrite.html.fr
Makefile.in: merge typo fix from test-integration branch
[apache] / docs / manual / mod / mod_rewrite.html.fr
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 <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
5 <!--
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7               This file is generated from xml source: DO NOT EDIT
8         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9       -->
10 <title>mod_rewrite - Serveur Apache HTTP Version 2.5</title>
11 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
12 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
13 <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" />
14 <script src="../style/scripts/prettify.min.js" type="text/javascript">
15 </script>
16
17 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
18 <body>
19 <div id="page-header">
20 <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>
21 <p class="apache">Serveur Apache HTTP Version 2.5</p>
22 <img alt="" src="../images/feather.png" /></div>
23 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
24 <div id="path">
25 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
26 <div id="page-content">
27 <div id="preamble"><h1>Module Apache mod_rewrite</h1>
28 <div class="toplang">
29 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
30 <a href="../fr/mod/mod_rewrite.html" title="Français">&nbsp;fr&nbsp;</a></p>
31 </div>
32 <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
33 règles permettant de réécrire les URLs des requêtes
34 à la volée</td></tr>
35 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
36 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>rewrite_module</td></tr>
37 <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_rewrite.c</td></tr></table>
38 <h3>Sommaire</h3>
39
40       <p>Le module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> utilise un moteur de
41       réécriture à base de règles, basé sur un interpréteur
42       d'expressions rationnelles PCRE, pour réécrire les URLs à la volée. Par
43       défaut, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> met en correspondance une URL
44       avec le système de fichiers. Cependant, on peut aussi l'utiliser
45       pour rediriger une URL vers une autre URL, ou pour invoquer une
46       requête interne à destination du mandataire.</p>
47       <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> fournit une méthode souple et
48       puissante pour manipuler les URLs en utilisant un nombre illimité
49       de règles. Chaque règle peut être associée à un nombre illimité de
50       conditions, afin de vous permettre de réécrire les URLs en
51       fonction de variables du serveur, de variables d'environnement,
52       d'en-têtes HTTP, ou de repères temporels.</p>
53       <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> agit sur la totalité de l'URL, y
54       compris la partie chemin. Une règle de réécriture peut être
55       invoquée dans <code>httpd.conf</code> ou dans un fichier
56       <code>.htaccess</code>. Le chemin généré par une règle de
57       réécriture peut inclure une chaîne de paramètres, ou peut renvoyer
58       vers un traitement secondaire interne, une redirection vers une
59       requête externe ou vers le mandataire interne.</p>
60
61       <p>Vous trouverez d'avantage de détails, discussions et exemples
62       dans la
63       <a href="../rewrite/">documentation détaillée
64       sur mod_rewrite</a>.</p>
65 </div>
66 <div id="quickview"><h3>Sujets</h3>
67 <ul id="topics">
68 <li><img alt="" src="../images/down.gif" /> <a href="#logging">Journalisation</a></li>
69 </ul><h3 class="directives">Directives</h3>
70 <ul id="toc">
71 <li><img alt="" src="../images/down.gif" /> <a href="#rewritebase">RewriteBase</a></li>
72 <li><img alt="" src="../images/down.gif" /> <a href="#rewritecond">RewriteCond</a></li>
73 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteengine">RewriteEngine</a></li>
74 <li><img alt="" src="../images/down.gif" /> <a href="#rewritemap">RewriteMap</a></li>
75 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteoptions">RewriteOptions</a></li>
76 <li><img alt="" src="../images/down.gif" /> <a href="#rewriterule">RewriteRule</a></li>
77 </ul>
78 <h3>Traitement des bugs</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">Journal des modifications de httpd</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_rewrite">Problèmes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_rewrite">Signaler un bug</a></li></ul><h3>Voir aussi</h3>
79 <ul class="seealso">
80 <li><a href="#comments_section">Commentaires</a></li></ul></div>
81 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
82 <div class="section">
83 <h2><a name="logging" id="logging">Journalisation</a></h2>
84
85     <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> offre une journalisation détaillée
86     de ses actions aux niveaux de journalisation <code>trace1</code> à
87     <code>trace8</code>. Le niveau de journalisation peut être défini de
88     manière spécifique à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> via la directive
89     <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> : jusqu'au niveau
90     <code>debug</code> aucune action n'est journalisée, alors qu'elles
91     le sont pratiquement toutes au niveau <code>trace8</code>.</p>
92
93     <div class="note">
94       L'utilisation d'un niveau de journalisation élevé pour
95       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> va ralentir votre serveur HTTP Apache
96       de manière dramatique ! N'utilisez un niveau de journalisation
97       supérieur à <code>trace2</code> qu'à des fins de débogage !
98     </div>
99
100     <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">LogLevel alert rewrite:trace3</pre>
101 </div>
102
103     <div class="note"><h3>RewriteLog</h3>
104       <p>Ceux qui sont familiers avec les versions précédentes de
105       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vont probablement rechercher en vain les
106       directives <code>RewriteLog</code> et
107       <code>RewriteLogLevel</code>. Elles ont été en effet remplacées
108       par une configuration de la journalisation par module, comme
109       mentionné plus haut.
110       </p>
111
112       <p>Pour extraire les traces spécifiques à
113       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, affichez le fichier journal en
114       redirigeant la sortie vers grep :</p>
115     <div class="example"><p><code>
116     tail -f error_log|fgrep '[rewrite:'
117     </code></p></div>
118     </div>
119
120 </div>
121 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
122 <div class="directive-section"><h2><a name="rewritebase" id="rewritebase">Directive</a> <a name="RewriteBase" id="RewriteBase">RewriteBase</a></h2>
123 <table class="directive">
124 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'URL de base pour les réécritures au niveau
125 répertoire</td></tr>
126 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteBase <em>chemin_URL</em></code></td></tr>
127 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Pas de valeur par défaut</code></td></tr>
128 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr>
129 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
130 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
131 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
132 </table>
133       <p>La directive <code class="directive">RewriteBase</code> permet de
134       spécifier le préfixe d'URL à utiliser dans un contexte de
135       répertoire (htaccess) pour les directives
136       <code class="directive"><a href="#rewriterule">RewriteRule</a></code> qui réécrivent vers un chemin
137       relatif.</p>
138       <p>Cette directive est <em>obligatoire</em> si vous utilisez un
139       chemin relatif dans une substitution, et dans un contexte de
140       répertoire (htaccess), sauf si au moins une de ces conditions est
141       vérifiée :</p>
142       <ul>
143           <li>La requête initiale, ainsi que la substitution, se
144           situent par raport à la valeur de la directive
145           <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> (c'est à
146           dire que pour y accéder, il n'est pas nécessaire d'utiliser
147           une directive telle qu'<code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>).</li>
148           <li>Le chemin du système de fichiers vers le répertoire
149           contenant la <code class="directive"><a href="#rewriterule">RewriteRule</a></code>, suffixé par
150           la substitution relative est aussi valide en tant qu'URL sur
151           le serveur (ce qui est rare).</li>
152           <li>A partir de la version 2.4.16 du serveur HTTP Apache,
153           cette directive peut être omise lorsque la requête est mise en
154           correspondance avec le système de fichiers via la directive
155           <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> ou le module
156           <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</li>
157       </ul>
158
159 <p>Dans l'exemple ci-dessous, la directive
160 <code class="directive">RewriteBase</code> est nécessaire afin d'éviter une
161 réécriture en http://example.com/opt/myapp-1.2.3/welcome.html car la
162 ressource n'était pas relative à la racine des documents. Cette erreur
163 de configuration aurait conduit le serveur à rechercher un répertoire
164 "opt" à la racine des documents.</p>
165
166 <pre class="prettyprint lang-config">DocumentRoot "/var/www/example.com"
167 AliasMatch "^/myapp" "/opt/myapp-1.2.3"
168 &lt;Directory "/opt/myapp-1.2.3"&gt;
169  RewriteEngine On
170     RewriteBase "/myapp/"
171     RewriteRule "^index\.html$"  "welcome.html"
172 &lt;/Directory&gt;</pre>
173
174
175
176 </div>
177 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
178 <div class="directive-section"><h2><a name="rewritecond" id="rewritecond">Directive</a> <a name="RewriteCond" id="RewriteCond">RewriteCond</a></h2>
179 <table class="directive">
180 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une condition qui devra être satisfaite pour que
181 la réécriture soit effectuée
182 </td></tr>
183 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code> RewriteCond
184       <em>chaîne_de_test</em> <em>expression_de_comparaison</em> [<em>drapeaux</em>]</code></td></tr>
185 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
186 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
187 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
188 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
189 </table>
190       <p>La directive <code class="directive">RewriteCond</code> permet de définir une
191       condition d'exécution d'une règle. Une ou plusieurs conditions
192       <code class="directive">RewriteCond</code> peuvent précéder une
193       directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code>. La règle de réécriture correspondante n'est
194       ainsi exécutée que si ces conditions sont satisfaites,
195       <strong>et</strong> si l'URI correspond au modèle spécifié dans la
196       règle.</p>
197
198       <p><em>TestString</em> est une chaîne qui peut contenir les
199       extensions suivantes en plus du texte simple :</p>
200
201       <ul>
202         <li>
203           <strong>références arrières de règle de réécriture</strong> :
204           ce sont des références arrières de la forme
205           <strong><code>$N</code></strong> (0 &lt;= N &lt;= 9). $1 à $9
206           permettent d'accéder aux parties regroupées (entre
207           parenthèses) du modèle, issues de la <code>RewriteRule</code>
208           concernée par le jeu de conditions <code>RewriteCond</code>
209           courant. $0 donne accès à l'ensemble de la chaîne
210           correspondant au modèle.</li>
211         <li>
212           <strong>Références arrières de condition de réécriture
213           </strong> : ce sont des références arrières de la forme
214           <strong><code>%N</code></strong> (0 &lt;= N &lt;= 9). %1 à %9
215           permettent d'accéder aux parties regroupées (entre
216           parenthèses) du modèle, issues de la dernière
217           condition <code>RewriteCond</code> satisfaite du jeu de conditions <code>RewriteCond</code>
218           courant. %0 donne accès à l'ensemble de la chaîne
219           correspondant au modèle.</li>
220         <li>
221           <strong>extensions de table de réécriture</strong> :
222           ce sont des extensions de la forme <strong><code>${nomTable:clé|défaut}</code></strong>. Voir la <a>href="#mapfunc"&gt;documentation sur RewriteMap</a>
223            pour plus de détails.
224         </li>
225         <li>
226           <strong>Variables du serveur</strong> :
227           ce sont des variables de la forme
228           <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
229             où <em>NOM_DE_VARIABLE</em> peut contenir une chaîne issue
230             de la liste suivante :
231
232           <table>
233           
234             <tr>
235               <th>En-têtes HTTP :</th> <th>connexion &amp; requête:</th> <th />
236             </tr>
237
238             <tr>
239               <td>
240                  HTTP_ACCEPT<br />
241                  HTTP_COOKIE<br />
242                  HTTP_FORWARDED<br />
243                  HTTP_HOST<br />
244                  HTTP_PROXY_CONNECTION<br />
245                  HTTP_REFERER<br />
246                  HTTP_USER_AGENT<br />
247               </td>
248
249               <td>
250                  AUTH_TYPE<br />
251                  CONN_REMOTE_ADDR<br />
252                  CONTEXT_PREFIX<br />
253                  CONTEXT_DOCUMENT_ROOT<br />
254                  IPV6<br />
255                  PATH_INFO<br />
256                  QUERY_STRING<br />
257                  REMOTE_ADDR<br />
258                  REMOTE_HOST<br />
259                  REMOTE_IDENT<br />
260                  REMOTE_PORT<br />
261                  REMOTE_USER<br />
262                  REQUEST_METHOD<br />
263                  SCRIPT_FILENAME<br />
264               </td>
265
266               <td />
267             </tr>
268
269             <tr>
270               <th>variables internes au serveur :</th> <th>date et heure :</th> <th>spéciaux :</th>
271             </tr>
272
273             <tr>
274               <td>
275                  DOCUMENT_ROOT<br />
276                  SCRIPT_GROUP<br />
277                  SCRIPT_USER<br />
278                  SERVER_ADDR<br />
279                  SERVER_ADMIN<br />
280                  SERVER_NAME<br />
281                  SERVER_PORT<br />
282                  SERVER_PROTOCOL<br />
283                  SERVER_SOFTWARE<br />
284               </td>
285
286               <td>
287                  TIME_YEAR<br />
288                  TIME_MON<br />
289                  TIME_DAY<br />
290                  TIME_HOUR<br />
291                  TIME_MIN<br />
292                  TIME_SEC<br />
293                  TIME_WDAY<br />
294                  TIME<br />
295               </td>
296
297               <td>
298                  API_VERSION<br />
299                  CONN_REMOTE_ADDR<br />
300                  HTTPS<br />
301                  IS_SUBREQ<br />
302                  REMOTE_ADDR<br />
303                  REQUEST_FILENAME<br />
304                  REQUEST_SCHEME<br />
305                  REQUEST_URI<br />
306                  THE_REQUEST<br />
307               </td>
308             </tr>
309           </table>
310
311                 <p>Ces variables correspondent toutes aux en-têtes MIME
312                 HTTP de mêmes noms, au variables C du serveur HTTP Apache, ou
313                 aux champs <code>struct tm</code> du système Unix. La
314                 plupart d'entre elles sont documentées <a href="../expr.html#vars">ici</a>, dans la
315                 spécification CGI ou ailleurs dans le
316                 manuel.</p>
317
318                 <p>SERVER_NAME et SERVER_PORT dépendent respectivement
319                 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>
320
321                 <p>Parmi les variables
322                 spécifiques à mod_rewrite, ou trouve les suivantes :</p>
323         
324                 <dl>
325                   <dt><code>API_VERSION</code></dt>
326
327                   <dd>C'est la version de l'API des modules Apache httpd
328                   (l'interface interne entre le serveur et les modules)
329                   pour la construction courante de httpd, telle qu'elle
330                   est définie dans include/ap_mmn.h. La version de l'API
331                   des modules correspond à la version du serveur Apache
332                   httpd
333                   utilisé (par exemple, pour la version 1.3.14 d'Apache
334                   httpd,
335                   il s'agit de la version 19990320:10), mais intéresse
336                   principalement les auteurs de modules.</dd>
337
338                   <dt><code>CONN_REMOTE_ADDR</code></dt>
339
340                   <dd>A partir de la version 2.4.8 : l'adresse IP distante de
341                   la connexion (voir le module
342                   <code class="module"><a href="../mod/mod_remoteip.html">mod_remoteip</a></code>).</dd>
343
344                   <dt><code>HTTPS</code></dt>
345
346                   <dd>Contient le texte "on" si la connexion
347                   utilise SSL/TLS, "off" dans le cas contraire
348                   (Cette variable peut être utilisée sans problème, que
349                   <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non).</dd>
350
351                   <dt><code>IS_SUBREQ</code></dt>
352
353                   <dd>Contient le texte "true" si la requête en cours
354                   de traitement est une sous-requête, "false" dans le
355                   cas contraire. Une sous-requête est générée quand un
356                   module a besoin de se référer à des fichiers ou URIs
357                   addidionnels pour pouvoir mener à bien sa tâche.</dd>
358
359                   <dt><code>REMOTE_ADDR</code></dt>
360                   <dd>L'adresse IP de l'hôte distant (se référer au
361                   module <code class="module"><a href="../mod/mod_remoteip.html">mod_remoteip</a></code>).</dd>
362
363                   <dt><code>REQUEST_FILENAME</code></dt>
364
365                   <dd>Le chemin complet local au système de fichiers
366                   du fichier ou du script correspondant
367                   à la requête, s'il a déjà été déterminé par le serveur
368                   au moment où on y fait référence. Dans le cas
369                   contraire, et en particulier dans le cas d'un serveur
370                   virtuel, <code>REQUEST_FILENAME</code> contient la
371                   valeur de <code>REQUEST_URI</code>. En fonction de la
372                   valeur de la directive <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code>, le serveur
373                   peut n'utiliser que certains éléments de tête du
374                   <code>REQUEST_URI</code> pour déterminer à quel
375                   fichier correspond la requête.</dd>
376
377                   <dt><code>REQUEST_SCHEME</code></dt>
378
379                   <dd>Contient le protocole de la requête (en général
380                   "http" ou "https"). La valeur peut être modifiée par
381                   la directive <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>.</dd>
382
383                   <dt><code>REQUEST_URI</code></dt>
384
385                   <dd>La partie chemin de l'URI de la requête, comme
386                   "/index.html". Ceci exclut en particulier la chaîne de
387                   paramètres de la requête qui est contenue dans la
388                   variable <code>QUERY_STRING</code>.</dd>
389
390                   <dt><code>THE_REQUEST</code></dt>
391
392                   <dd>La ligne de requête HTTP complète envoyée par le
393                   navigateur au serveur (par exemple, "<code>GET
394                   /index.html HTTP/1.1</code>"), à l'exclusion de tout
395                   en-tête ajouté par le navigateur. Cette
396                   valeur n'a pas été déséchappée (décodée), à la
397                   différence de la plupart des variables suivantes.</dd>
398                 </dl>
399
400         </li>
401       </ul>
402
403       <p>Si la <em>chaîne_de_test</em> contient la valeur spéciale
404       <code>expr</code>, <em>expression_de_comparaison</em> sera traité
405       en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>. Si des en-têtes HTTP sont
406       référencés dans l'expression rationnelle, et si le drapeau
407       <code>novary</code> n'est pas activé, ils seront ajoutés à
408       l'en-tête Vary.</p>
409
410       <p>Autres points à connaître ::</p>
411       <ol>
412         <li>
413         <p>Les variables <code>SCRIPT_FILENAME</code> et
414         <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
415         du champ <code>filename</code> de la
416         structure interne <code>request_rec</code>du serveur HTTP Apache.
417         Le premier nom correspond au nom de variable bien connu CGI,
418         alors que le second est l'équivalent de REQUEST_URI (qui
419         contient la valeur du champ <code>uri</code> de
420         <code>request_rec</code>).</p>
421         <p>Si une substitution intervient et si la réécriture se
422         poursuit, la valeur des deux variables sera mise à jour en
423         conséquence.</p>
424         <p>Dans le contexte du serveur principal (c'est à dire avant que
425         la requête ne soit mise en correspondance avec le système de
426         fichiers), SCRIPT_FILENAME et REQUEST_FILENAME  ne peuvent pas
427         contenir le chemin entier dans le système de fichiers local car
428         ce chemin b'est pas connu à ce stade du traitement. Dans ce cas,
429         les deux variables contiendront la valeur de REQUEST_URI. Pour
430         obtenir le chemin complet de la requête dans le système de
431         fichiers local dans le contexte du serveur principal, utilisez une
432         référence avant à base d'URL
433         <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la valeur
434         finale de REQUEST_FILENAME.</p></li>
435
436
437         <li>
438         <code>%{ENV:<em>variable</em>}</code>, où <em>variable</em> peut
439         correspondre à une variable d'environnement quelconque.</li>
440         <li>
441         <code>%{ENV:variable}</code> est aussi disponible, où
442         <em>variable</em> peut correspondre à toute variable
443         d'environnement. Peut être consulté via des structures internes
444         d'Apache httpd et (si on ne les trouve pas ici) via la fonction
445         <code>getenv()</code> à partir du processus du serveur Apache
446         httpd.</li>
447
448         <li>Que <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non, on peut
449         utiliser <code>%{SSL:variable}</code>, où <em>variable</em>
450         peut être remplacé par le nom d'une
451         <a href="mod_ssl.html#envvars">variable
452         d'environnement SSL</a> . Si <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> n'est pas
453         chargé, cette variable contiendra toujours une chaîne vide.
454         Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
455         contenir la valeur <code>128</code>. Ces variables sont
456         disponibles même si l'option <code>StdEnvVars</code> de la
457         directive <code class="directive"><a href="../mod/mod_ssl.html#ssloptions">SSLOptions</a></code> n'a
458         pas été définie.</li>
459
460         <li>
461         On peut utiliser <code>%{HTTP:en-tête}</code>, où
462         <em>en-tête</em> peut correspondre à tout nom d'en-tête MIME
463         HTTP, pour extraire la valeur d'un en-tête envoyé dans la
464         requête HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
465         contiendra la valeur de l'en-tête HTTP
466         "<code>Proxy-Connection:</code>".
467         Si on utilise un en-tête HTTP
468         dans une condition, et si cette condition est évaluée à
469         <code>vrai</code> pour la requête, cet en-tête sera ajouté à l'en-tête Vary de
470         la réponse. Il ne le sera pas si la condition est évaluée à
471         <code>faux</code>. L'ajout de l'en-tête HTTP à l'en-tête Vary
472         est nécessaire à une mise en cache appropriée.
473         <p>Il faut garder à l'esprit que les conditions suivent une
474         logique de cout-circuit si le drapeau
475         '<strong><code>ornext|OR</code></strong>' est utilisé, et que de
476         ce fait, certaines d'entre elles ne seront pas évaluées.</p>
477         </li>
478
479         <li>A des fins de référence avant, on peut utiliser,
480         <a id="LA-U" name="LA-U"><code>%{LA-U:variable}</code></a>, qui
481         permet d'effectuer une sous-requête interne à base d'URL, afin
482         de déterminer la valeur finale de <em>variable</em>. Ceci permet
483         d'accéder à la valeur d'une variable pour la réécriture inconnue
484         à ce stade du traitement, mais qui sera définie au
485         cours d'une phase ultérieure.
486         <p>Par exemple, pour effectuer une réécriture dépendant de la
487         variable <code>REMOTE_USER</code> dans le contexte du serveur
488         principal (fichier <code>httpd.conf</code>), vous devez utiliser
489         <code>%{LA-U:REMOTE_USER}</code> - cette variable est définie
490         par la phase d'autorisation qui intervient <em>après</em> la
491         phase de traduction d'URL (pendant laquelle mod_rewrite opère).</p>
492         <p>Par contre, comme mod_rewrite implémente son contexte de
493         répertoire (fichier <code>.htaccess</code>) via la phase Fixup
494         de l'API, et comme la phase d'autorisation intervient
495         <em>avant</em> cette dernière, vous pouvez vous contenter
496         d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
497
498         <li>
499         <code>%{LA-F:variable}</code> peut être utilisée pour effectuer
500         une sous-requête interne (basée sur le nom de fichier), afin de
501         déterminer la valeur finale de <em>variable</em>. La plupart du
502         temps, elle est identique à LA-U (voir ci-dessus).</li>
503       </ol>
504
505
506       <p><em>expression_de_comparaison</em> est une expression
507       rationnelle qui est appliquée à l'instance actuelle de
508       <em>chaîne_de_test</em>. <em>chaîne_de_test</em> est d'abord
509       évaluée, puis comparée à
510       l'<em>expression_de_comparaison</em>.</p>
511
512       <p><em>expression_de_comparaison</em> est en général une
513       <em>expression rationnelle compatible perl</em>, mais vous
514       disposez des syntaxes supplémentaires suivantes pour effectuer
515       d'autres tests utiles sur <em>chaîne_de_test</em> :
516       </p>
517
518       <ol>
519         <li>Vous pouvez préfixer l'expression avec un caractère
520         '<code>!</code>' (point d'exclamation) pour inverser le résultat
521         de la condition, quelle que soit l'<em>expression de
522         comparaison</em> utilisée.</li>
523
524         <li>Vous pouvez effectuer des comparaisons lexicographiques de
525         chaînes :
526
527          <dl>
528             <dt><strong>&lt;expression</strong></dt>
529             <dd>inférieur au sens lexicographique<br />
530             Traite l'<em>expression</em> comme une chaîne de
531             caractères et la compare lexicographiquement à
532             <em>chaîne_de_test</em>. La condition est satisfaite si
533             <em>chaîne_de_test</em> est inférieure au sens
534             lexicographique à l'<em>expression</em>.</dd>
535
536             <dt><strong>&gt;expression</strong></dt>
537             <dd>supérieur au sens lexicographique<br />
538             Traite l'<em>expression</em> comme une chaîne de
539             caractères et la compare lexicographiquement à
540             <em>chaîne_de_test</em>. La condition est satisfaite si
541             <em>chaîne_de_test</em> est supérieure au sens
542             lexicographique à l'<em>expression</em>.</dd>
543
544             <dt><strong>=expression</strong></dt>
545             <dd>égal au sens lexicographique<br />
546             Traite l'<em>expression</em> comme une chaîne de
547             caractères et la compare lexicographiquement à
548             <em>chaîne_de_test</em>. La condition est satisfaite si
549             <em>chaîne_de_test</em> est égale au sens
550             lexicographique à l'<em>expression</em> (les deux chaînes
551             sont exactement identiques, caractère pour caractère). Si
552             <em>expression</em> est <code>""</code> (deux guillemets),
553             <em>chaîne_de_test</em> est comparée à la
554             chaîne vide.</dd>
555
556             <dt><strong>&lt;=expression de comparaison</strong></dt>
557             <dd>inférieur ou égal à au sens lexicographique<br />
558             Considère l'<em>expression_de_comparaison</em> comme une
559             chaîne de caractères et la compare au sens lexicographique à
560             la <em>chaîne_de_test</em>. Vrai si <em>chaîne_de_test</em>
561             précède lexicographiquement <em>expression_de_comparaison</em>, ou est
562             égale à <em>expression_de_comparaison</em> (les deux chaînes
563             sont identiques, caractère pour caractère).</dd>
564
565             <dt><strong>&gt;=expression de comparaison</strong></dt>
566             <dd>supérieur ou égal à au sens lexicographique<br />
567             Considère l'<em>expression_de_comparaison</em> comme une
568             chaîne de caractères et la compare au sens lexicographique à
569             la <em>chaîne_de_test</em>. Vrai si <em>chaîne_de_test</em>
570             suit lexicographiquement <em>expression_de_comparaison</em>, ou est
571             égale à <em>expression_de_comparaison</em> (les deux chaînes
572             sont identiques, caractère pour caractère).</dd>
573         </dl>
574         </li>
575
576         <li>
577           Vous pouvez effectuer des comparaisons d'entiers :
578           <dl>
579
580             <dt><strong>-eq</strong></dt>
581             <dd>est numériquement égal à<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 les deux expressions sont
585             numériquement égales.</dd>
586
587             <dt><strong>-ge</strong></dt>
588             <dd>est numériquement supérieur ou égal à<br />
589             La <em>chaîne_de_test</em> est considérée comme un entier,
590             et est comparée numériquement à l'<em>expression de
591             comparaison</em>. Vrai si <em>chaîne_de_test</em> est
592             numériquement supérieure ou égale à
593             <em>expression_de_comparaison</em>.</dd>
594
595              <dt><strong>-gt</strong></dt>
596              <dd>est numériquement supérieur à<br />
597             La <em>chaîne_de_test</em> est considérée comme un entier,
598             et est comparée numériquement à l'<em>expression de
599             comparaison</em>. Vrai si <em>chaîne_de_test</em> est
600             numériquement
601             supérieure à <em>expression_de_comparaison</em>.</dd>
602
603             <dt><strong>-le</strong></dt>
604             <dd>est numériquement inférieur ou égal à<br />
605             La <em>chaîne_de_test</em> est considérée comme un entier,
606             et est comparée numériquement à l'<em>expression de
607             comparaison</em>. Vrai si <em>chaîne_de_test</em> est
608             numériquement
609             inférieure ou égale à <em>expression_de_comparaison</em>.
610             Attention à la confusion avec le drapeau <strong>-l</strong>
611             en utilisant la variante the <strong>-L</strong> ou
612             <strong>-h</strong>.</dd>
613
614              <dt><strong>-lt</strong></dt>
615              <dd>est numériquement inférieur à<br />
616             La <em>chaîne_de_test</em> est considérée comme un entier,
617             et est comparée numériquement à l'<em>expression de
618             comparaison</em>. Vrai si <em>chaîne_de_test</em> est
619             numériquement
620             inférieure à <em>expression_de_comparaison</em>.
621             Attention à la confusion avec le drapeau <strong>-l</strong>
622             en utilisant la variante the <strong>-L</strong> ou
623             <strong>-h</strong>.</dd>
624
625             <dt><strong>-ne</strong></dt>
626             <dd>Est numériquement <strong>n</strong>on <strong>é</strong>gal à<br />
627              La <em>Chaîne de test</em> est considérée comme un entier et est
628              numériquement comparée à l'<em>expression de comparaison</em>. Vrai
629              si les deux éléments comparés sont numériquement différents.
630              Equivalent à <code>!-eq</code>.</dd>           
631
632            </dl>
633         </li>
634
635         <li>Vous pouvez effectuer différents tests sur les attributs de
636         fichier :
637           <dl>
638
639             <dt><strong>-d</strong></dt>
640             <dd>est un <strong>r</strong>épertoire<br />
641             Traite <em>chaîne_de_test</em> comme un chemin et vérifie
642             s'il existe ou pas, et s'il s'agit d'un répertoire.</dd>
643
644             <dt><strong>-f</strong></dt>
645             <dd>est un <strong>f</strong>ichier régulier<br />
646             Traite <em>chaîne_de_test</em> comme un chemin et vérifie
647             s'il existe ou pas, et s'il s'agit d'un fichier régulier.</dd>
648
649             <dt><strong>-F</strong></dt>
650             <dd>test de l'existence d'un fichier via une sous-requête<br />
651             Vérifie si <em>chaîne_de_test</em> est un fichier valide,
652             accessible à travers tous les contrôles d'accès du serveur
653             actuellement configurés pour ce chemin. C'est une
654             sous-requête interne qui effectue cette vérification - à
655             utiliser avec précautions car les performances du serveur
656             peuvent s'en trouver affectées !</dd>
657
658             <dt><strong>-h</strong></dt>
659             <dd>est un lien symbolique, selon la convention bash<br />
660             Voir <strong>-l</strong>.</dd>
661
662             <dt><strong>-l</strong></dt>
663             <dd>est un <strong>l</strong>ien symbolique<br />
664             Considère la <em>chaîne_de_test</em> comme un chemin et
665             vérifie son existence et si elle est un lien symbolique. On
666             peut aussi utiliser la convention bash <strong>-L</strong>
667             ou <strong>-h</strong> lorsqu'il y a risque de confusion
668             avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</dd>
669
670             <dt><strong>-L</strong></dt>
671             <dd>est un lien symbolique, selon la convention bash<br />
672             Voir <strong>-l</strong>.</dd>
673
674             <dt><strong>-s</strong></dt>
675             <dd>est un fichier régulier d'une certaine taille<br />
676             Considère la <em>chaîne_de_test</em> comme un chemin et
677             vérifie son existence et si elle est un fichier régulier
678             d'une taille supérieure à zéro.</dd>
679
680             <dt><strong>-U</strong></dt>
681             <dd><p>test de l'existence d'une
682             URL via une sous-requête<br />
683             Vérifie si <em>chaîne_de_test</em> est une URL valide,
684             accessible à travers tous les contrôles d'accès du serveur
685             actuellement configurés pour ce chemin. C'est une
686             sous-requête interne qui effectue cette vérification - à
687             utiliser avec précautions car les performances du serveur
688             peuvent s'en trouver affectées !</p>
689             <p>Ce drapeau ne renvoie <em>que</em> des informations
690             concernant le contrôle d'accès, l'authentification et
691             l'autorisation. Il ne renvoie <em>pas</em> d'informations
692             concernant le code d'état que le gestionnaire configuré
693             (static file, CGI, proxy, etc...) aurait, quant à lui,
694             retourné.</p></dd>
695
696           <dt><strong>-x</strong></dt>
697           <dd>a l'attribut d'exécution positionné<br />
698             Considère la <em>chaîne_de_test</em> comme un chemin et
699             vérifie son existence et si elle a son attribut d'exécution
700             positionné. Ce positionnement est déterminé en fonction de
701             l'OS sous-jacent.</dd>
702
703             </dl>
704
705             Par exemple:
706
707         <pre class="prettyprint lang-config">RewriteCond /var/www/%{REQUEST_URI} !-f
708 RewriteRule ^(.+) /other/archive/$1 [R]</pre>
709
710
711         </li>
712
713         <li>
714            <p>Si la <em>chaîne_de_test</em> contient la valeur spéciale
715            <code>expr</code>, la <em>chaîne de comparaison</em> sera
716            traitée en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>.</p>
717
718            <p>
719             Dans l'exemple ci-dessous, on utilise <code>-strmatch</code>
720             pour comparer le <code>REFERER</code> avec le nom d'hôte du
721             site afin de bloquer le hotlinking (référencement direct)
722             non désiré.
723            </p>
724
725            <pre class="prettyprint lang-config">           RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
726            RewriteRule "^/images" "-" [F]</pre>
727
728         </li>
729     </ol>
730
731         <p>Vous pouvez aussi définir certains drapeaux pour
732         l'<em>expression_de_comparaison</em> en ajoutant ces
733         <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
734         comme troisième argument de la directive
735         <code>RewriteCond</code>, où <em>drapeaux</em> est un
736         sous-ensemble séparé par des virgules des drapeaux suivants :</p>
737
738       <ul>
739         <li>'<strong><code>nocase|NC</code></strong>'
740         (<strong>n</strong>o <strong>c</strong>ase)<br />
741         Rend le test insensible à la casse - il n'est pas fait de
742         distinction entre majuscules et minuscules, à la fois dans le
743         développement de <em>chaîne_de_test</em> et dans
744         <em>expression_de_comparaison</em>. Ce drapeau n'est pris en
745         compte que lors d'une comparaison entre <em>chaîne_de_test</em>
746         et <em>expression_de_comparaison</em>. Il ne l'est pas pour les
747         vérification par sous-requêtes ou sur le système de
748         fichiers.</li>
749
750         <li>
751           '<strong><code>ornext|OR</code></strong>'
752           (<strong>ou</strong> condition suivante)<br />
753           Permet de chaîner les conditions de règles avec un OU au
754           lieu du AND implicite. Exemple typique :
755
756 <pre class="prettyprint lang-config">RewriteCond "%{REMOTE_HOST}"  "^host1"  [OR]
757 RewriteCond "%{REMOTE_HOST}"  "^host2"  [OR]
758 RewriteCond "%{REMOTE_HOST}"  "^host3"
759 RewriteRule ...règles concernant tous ces hôtes...</pre>
760
761
762           Sans ce drapeau, les paires
763           condition/règle devraient être écrites trois fois.
764         </li>
765
766         <li>'<strong><code>novary|NV</code></strong>'
767         (<strong>n</strong>o <strong>v</strong>ary)<br />
768         Si la condition contient un en-tête HTTP, ce drapeau empêche
769         ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br />
770         L'utilisation de ce drapeau peut provoquer une mise en cache
771         incorrecte de la réponse, si la représentation de cette réponse
772         varie avec la valeur de l'en-tête considéré. Ce drapeau ne
773         devrait donc être utilisé que si l'on maîtrise parfaitement le
774         fonctionnement de l'en-tête Vary.
775         </li>
776       </ul>
777       
778
779       <p><strong>Exemple :</strong></p>
780
781        <p>Pour réécrire la page d'accueil d'un site en fonction de
782        l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
783        pouvez utiliser ce qui suit : </p>
784
785 <pre class="prettyprint lang-config">RewriteCond  "%{HTTP_USER_AGENT}"  "(iPhone|Blackberry|Android)"
786 RewriteRule  "^/$"               "/homepage.mobile.html"  [L]
787
788 RewriteRule  "^/$"                 "/homepage.std.html"  [L]</pre>
789
790
791         <p>Explications : si vous utilisez un navigateur
792         qui s'identifie comme un
793         navigateur de plateforme mobile (notez que l'exemple est
794         incomplet car il existe de nombreuses autres plateformes
795         mobiles), c'est la version pour mobile de la page d'accueil qui
796         sera renvoyée. Dans le cas contraire, ce sera la page d'accueil
797         standard.</p>
798
799
800 </div>
801 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
802 <div class="directive-section"><h2><a name="rewriteengine" id="rewriteengine">Directive</a> <a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a></h2>
803 <table class="directive">
804 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active ou désactive l'exécution du
805 moteur de réécriture</td></tr>
806 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteEngine on|off</code></td></tr>
807 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>RewriteEngine off</code></td></tr>
808 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
809 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
810 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
811 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
812 </table>
813
814       <p>La directive <code class="directive">RewriteEngine</code> active ou
815       désactive l'exécution du moteur de réécriture. Si sa valeur est
816       <code>off</code>, ce module n'exécutera aucun traitement et ne
817       mettra pas à jour les variables d'environnement
818       <code>SCRIPT_URx</code>.</p>
819
820       <p>Plutôt que de commenter toutes les directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code>, il est préférable
821       d'utiliser cette directive si l'on souhaite désactiver les
822       règles de réécriture dans un contexte particulier.</p>
823
824       <p>Notez que les  hôtes virtuels n'héritent pas des
825       configurations de réécriture. Ceci implique que vous devez
826       insérer une directive <code>RewriteEngine on</code> dans chaque
827       hôte virtuel pour lequel vous souhaitez utiliser des règles
828       de réécriture.</p>
829
830       <p>Les directives <code class="directive"><a href="#rewritemap">RewriteMap</a></code> du type
831       <code>prg</code> ne sont pas prises en compte au cours de
832       l'initialisation du serveur si elle ont été définies dans un
833       contexte où la directive <code class="directive">RewriteEngine</code> n'a
834       pas été définie à <code>on</code>.</p>
835
836
837 </div>
838 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
839 <div class="directive-section"><h2><a name="rewritemap" id="rewritemap">Directive</a> <a name="RewriteMap" id="RewriteMap">RewriteMap</a></h2>
840 <table class="directive">
841 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une fonction de mise en correspondance pour la
842 recherche de mots-clés</td></tr>
843 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em> <em>MapTypeOptions</em>
844 </code></td></tr>
845 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
846 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
847 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
848 </table>
849       <p>La directive <code class="directive">RewriteMap</code> définit une
850       <em>Table de correspondance pour la réécriture</em> que les
851       fonctions de mise en correspondance
852       peuvent utiliser dans les chaînes de substitution des règles
853       pour insérer/substituer des champs en recherchant des mots-clés.
854       La source utilisée pour cette recherche peut être de plusieurs
855       types.</p>
856
857       <p><a id="mapfunc" name="mapfunc"><em>MapName</em></a> est le nom de la table de correspondance
858       et servira à spécifier une fonction de mise en correspondance
859       pour les chaînes de substitution d'une règle de réécriture selon
860       une des constructions suivantes :</p>
861
862       <p class="indent">
863         <strong><code>${</code> <em>MapName</em> <code>:</code>
864         <em>mot-clé</em> <code>}</code><br />
865          <code>${</code> <em>MapName</em> <code>:</code>
866         <em>mot-clé</em> <code>|</code> <em>valeur par défaut</em>
867         <code>}</code></strong>
868       </p>
869
870       <p>Lorsqu'une telle construction est rencontrée, la table de
871       correspondance <em>MapName</em> est consultée
872       et la clé <em>mot-clé</em> recherchée. Si la clé est trouvée, la
873       construction est remplacée par
874       la <em>valeur de remplacement</em>. Si la clé n'est pas trouvée,
875       elle est remplacée par la <em>valeur par défaut</em>, ou par une
876       chaîne vide si aucune <em>valeur par défaut</em> n'est
877       spécifiée. La valeur vide se comporte comme si la
878       clé était absente ; il est donc impossible de distinguer une
879       valeur vide d'une absence de clé.</p>
880
881       <p>Par exemple, vous pouvez définir une directive
882       <code class="directive">RewriteMap</code> comme suit </p>
883
884       <pre class="prettyprint lang-config">RewriteMap map-exemple "txt:/chemin/vers/fichier/map.txt"</pre>
885
886
887       <p>Vous pourrez ensuite utiliser cette table dans une
888       directive <code class="directive">RewriteRule</code> comme suit :</p>
889
890       <pre class="prettyprint lang-config">RewriteRule "^/ex/(.*)" "${map-exemple:$1}"</pre>
891
892
893       <p>La signification de l'argument <em>MapTypeOptions</em> dépend du <em>MapType</em>
894       spécifié. Veuillez vous référer au document <a href="../rewrite/rewritemap.html">Utiliser RewriteMap</a> pour
895       plus de détails.</p>
896
897       <p>Les combinaisons suivantes pour <em>type de correspondance</em>
898       et <em>MapSource</em>
899       peuvent être utilisées :</p>
900
901 <dl>
902     <dt>txt</dt>
903         <dd>Un fichier texte contenant des paires clé-valeur séparées
904         par des espaces, une paire par ligne (<a href="../rewrite/rewritemap.html#txt">Détails ...</a>).</dd>
905
906     <dt>rnd</dt>
907         <dd>Sélection aléatoire d'une entrée depuis un fichier texte (<a href="../rewrite/rewritemap.html#rnd">Détails ...</a>).</dd>
908
909     <dt>dbm</dt>
910         <dd>Recherche une entrée dans un fichier dbm contenant des
911         paires nom-valeur. Le condensé hash est élaboré à partir d'un
912         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>
913
914     <dt>int</dt>
915         <dd>Une des quatre fonctions internes disponibles que fournit
916         <code>RewriteMap</code>: toupper, tolower, escape ou unescape
917         (<a href="../rewrite/rewritemap.html#int">Détails ...</a>).</dd>
918
919     <dt>prg</dt>
920         <dd>Appelle un programme externe ou un script pour effectuer la
921         réécriture (<a href="../rewrite/rewritemap.html#prg">Détails
922         ...</a>).</dd>
923
924     <dt>dbd or fastdbd</dt>
925         <dd>Une commande SQL SELECT à exécuter pour rechercher la cible
926         de réécriture (<a href="../rewrite/rewritemap.html#dbd">Détails
927         ...</a>).</dd>
928     </dl>
929
930 <p>Vous trouverez plus de détails et de nombreux exemples dans le <a href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
931
932
933 </div>
934 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
935 <div class="directive-section"><h2><a name="rewriteoptions" id="rewriteoptions">Directive</a> <a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a></h2>
936 <table class="directive">
937 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options spéciales
938 pour le moteur de réécriture</td></tr>
939 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
940 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
941 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
942 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
943 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
944 </table>
945
946       <p>La directive <code class="directive">RewriteOptions</code> définit
947       certaines options spéciales pour la configuration au niveau du
948       serveur ou du répertoire. La chaîne de caractères <em>Option</em>
949       ne peut actuellement prendre qu'une des valeurs suivantes :</p>
950
951       <dl>
952       <dt><code>Inherit</code></dt>
953       <dd>
954
955       <p>Ceci force la configuration locale à hériter de la
956       configuration du niveau supérieur. Dans le contexte des hôtes
957       virtuels, cela signifie que les correspondances, conditions et
958       règles du serveur principal sont héritées. Dans le contexte des
959       répertoires, cela signifie que les conditions et règles de la
960       configuration <code>.htaccess</code> ou les sections <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> du répertoire
961       parent sont héritées. Les règles héritées sont virtuellement
962       copiées dans la section où cette directive est utilisée. Si elles
963       sont utilisées avec des règles locales, les règles héritées sont
964       placées après ces dernières. La place de cette directive - avant
965       ou après les règles locales - n'a aucune influence sur ce
966       comportement. Si des règles locales ont forcé l'arrêt de la
967       réécriture, les règles héritées ne seront pas traitées.</p>
968
969       <div class="warning">
970       Les règles héritées du niveau parent sont appliquées
971       <strong>after</strong> après les règles spécifiées dans le niveau
972       enfant.
973       </div>
974       </dd>
975
976       <dt><code>InheritBefore</code></dt>
977       <dd>
978       <p>Même effet que l'option <code>Inherit</code> ci-dessus, mais
979       les règles spécifiées dans le niveau parent s'appliquent
980       <strong>avant</strong> les règles spécifiées dans le niveau
981       enfant.<br />
982       Disponible depuis la version 2.3.10 du serveur HTTP Apache.</p>
983       </dd>
984
985       <dt><code>InheritDown</code></dt>
986       <dd>
987
988       <p>Si cette option est activée, toutes les configurations enfants
989       hériteront de la configuration courante. Il en est de même si l'on
990       spécifie <code>RewriteOptions Inherit</code> dans toutes les
991       configurations enfants. Voir l'option <code>Inherit</code> pour
992       plus de détails à propos de la manière dont les relations
993       parent-enfants sont traitées.<br />
994       Cette option est disponible à partir
995       de la version 2.4.8 du serveur HTTP Apache.</p>
996       </dd>
997
998       <dt><code>InheritDownBefore</code></dt>
999       <dd>
1000
1001       <p>L'effet de cette option est équivalent à celui de l'option
1002       <code>InheritDown</code> ci-dessus, mais les règles de la
1003       configuration parente s'appliquent <strong>avant</strong> toute
1004       règle de la configuration enfant.<br />
1005       Cette option est disponible à partir
1006       de la version 2.4.8 du serveur HTTP Apache.</p>
1007       </dd>
1008
1009       <dt><code>IgnoreInherit</code></dt>
1010       <dd>
1011
1012       <p>Si cette option est activée, les configurations courante et
1013       enfants ignoreront toute règle héritée d'une configuration parente
1014       via les options <code>InheritDown</code> ou
1015       <code>InheritDownBefore</code>.<br />
1016       Cette option est disponible à partir
1017       de la version 2.4.8 du serveur HTTP Apache.</p>
1018       </dd>
1019       
1020       <dt><code>AllowNoSlash</code></dt>
1021       <dd>
1022       <p>Par défaut, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ignore les URLs qui
1023       correspondent à un répertoire sur disque, mais ne comportent pas
1024       de slash final, afin que le module <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>
1025       redirige le client vers l'URL canonique avec un slash final.</p>
1026       
1027       <p>Lorsque la directive <code class="directive"><a href="../mod/mod_dir.html#directoryslash">DirectorySlash</a></code> est définie à off, il
1028       est possible de spécifier l'option <code>AllowNoSlash</code> pour
1029       s'assurer que les règles de réécriture ne soient plus ignorées.
1030       Si on le souhaite, cette option permet de faire s'appliquer des
1031       règles de réécriture qui correspondent à un répertoire sans slash
1032       final au sein de fichiers .htaccess.<br />
1033       Elle est disponible à
1034       partir de la version 2.4.0 du serveur HTTP Apache.</p>
1035       </dd>
1036
1037       <dt><code>AllowAnyURI</code></dt>
1038       <dd>
1039
1040       <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
1041       contexte de <code>serveur virtuel</code> ou de serveur principal,
1042       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ne traitera les règles de réécriture
1043       que si l'URI de la requête respecte la syntaxe d'un <a href="directive-dict.html#Syntax">chemin URL</a>. Ceci permet
1044       d'éviter certains problèmes de sécurité où des règles
1045       particulières pourraient permettre  des développements de modèles
1046       inattendus (voir <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3368">CVE-2011-3368</a>
1047       et <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4317">CVE-2011-4317</a>).
1048       Pour s'affranchir de la restriction relative à la syntaxe des chemins URL, on peut
1049       utiliser l'option <code>AllowAnyURI</code>, afin de permettre à
1050       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> d'appliquer le jeu de règles à toute
1051       chaîne de requête URI, sans vérifier si cette dernière respecte la
1052       grammaire des chemins URL définie dans la spécification HTTP.<br />
1053       Disponible depuis la version 2.4.3 du serveur HTTP Apache.</p>
1054
1055       <div class="warning">
1056       <h3>Avertissement à propos de la sécurité</h3> 
1057
1058       <p>L'utilisation de cette option rendra le serveur vulnérable à
1059       certains problèmes de sécurité si les règles de réécritures
1060       concernées n'ont pas été rédigées avec soin. Il est par conséquent
1061       <strong>fortement recommandé</strong> de ne pas utiliser cette
1062       option. En particulier, prêtez attention aux chaînes en entrée contenant le
1063       caractère '<code>@</code>', qui peuvent modifier l'interprétation
1064       de l'URI réécrite, comme indiqué dans les liens ci-dessus.</p>
1065       </div>
1066       </dd>
1067
1068       <dt><code>MergeBase</code></dt>
1069       <dd>
1070
1071       <p>Avec cette option, la valeur de la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code> est recopiée depuis
1072       une valeur explicitement définie dans tout sous-répertoire qui ne
1073       définit pas sa propre directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code>. Il s'agissait du
1074       comportement par défaut avec les versions 2.4.0 à 2.4.3, et ce
1075       drapeau qui permet de retrouver ce comportement est disponible
1076       depuis la version 2.4.4 du serveur HTTP Apache.</p>
1077       </dd>
1078
1079       <dt><code>IgnoreContextInfo</code></dt>
1080       <dd>
1081
1082       <p>Lors d'une
1083       substitution relative dans un contexte de répertoire (htaccess),
1084       et si la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code> n'a pas été définie,
1085       ce module utilise des informations en provenance d'une extension
1086       d'URL et du contexte du système de fichiers pour transformer la
1087       sustitution relative en URL. Par exemple, les modules
1088       <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code> et <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>
1089       utilisent ces informations de contexte étendu. Disponible à partir de la
1090       version 2.4.16 du serveur HTTP Apache.</p>
1091       </dd>
1092
1093       <dt><code>LegacyPrefixDocRoot</code></dt>
1094       <dd>
1095
1096       <p>Avant la version 2.4.26, si une substitution était une URL absolue qui
1097       correspondait au serveur virtuel courant, l'URL pouvait être tout d'abord
1098       réduite à sa partie chemin, puis enfin en chemin local. Comme l'URL peut
1099       être réduite en chemin local, le chemin doit être préfixé par la
1100       valeur de la directive DocumentRoot, ce qui permet d'interdire l'accès à
1101       un fichier tel que /tmp/myfile suite à une requête pour
1102       http://host/file/myfile avec la <code class="directive"><a href="#rewriterule">RewriteRule</a></code> suivante :</p>
1103       <pre class="prettyprint lang-config">RewriteRule /file/(.*) http://localhost/tmp/$1</pre>
1104
1105       <p>Cette option permet de restaurer l'ancien comportement lorsqu'un chemin
1106       local obtenu à partir de la réduction d'une URL n'est pas préfixé par la
1107       valeur de la directive DocumentRoot. Disponible à partir de la version
1108       2.4.26 du serveur HTTP Apache.</p>
1109       </dd>
1110
1111       <dt><code>LongURLOptimization</code></dt>
1112       <dd>
1113       <p>Cette option permet de réduire la consommation de mémoire des jeux de
1114       règles longs et non optimisés qui enregistrent de manière répétitive de
1115       longues valeurs dans des variables au sein des directives RewriteCond et
1116       RewriteRule. Disponible à partir de la version 2.5 du serveur HTTP Apache.</p>
1117       </dd>
1118
1119       </dl>
1120
1121 </div>
1122 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1123 <div class="directive-section"><h2><a name="rewriterule" id="rewriterule">Directive</a> <a name="RewriteRule" id="RewriteRule">RewriteRule</a></h2>
1124 <table class="directive">
1125 <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>
1126 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
1127       <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
1128 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
1129 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
1130 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
1131 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
1132 </table>
1133       <p>La directive <code class="directive">RewriteRule</code> est le
1134       véritable cheval de trait de la réécriture. La directive peut
1135       apparaître plusieurs fois, chaque instance définissant une
1136       règle de réécriture particulière. L'ordre dans lequel ces règles
1137       sont définies est important - il s'agit de l'ordre dans lequel
1138       les règles seront appliquées au cours du processus de
1139       réécriture.</p>
1140
1141       <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
1142       <a id="regexp" name="regexp">expression rationnelle</a>
1143       compatible perl. Ce avec quoi ce modèle est comparé dépend de l'endroit où
1144       la directive <code class="directive">RewriteRule</code> est définie.</p>
1145
1146 <div class="note"><h3><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est comparé ?</a></h3>
1147
1148 <ul>
1149       <li><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
1150       d'abord comparé à la portion de l'URL située entre le nom d'hôte
1151       éventuellement accompagné du port, et la chaîne de paramètres (par
1152       exemple "/app1/index.html"). Il s'agit du <a href="directive-dict.html#Syntax">URL-path</a> décodé de sa valeur "%xx".</p></li>
1153
1154       <li><p>Dans un contexte de répertoire (sections <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> et fichiers .htaccess), le
1155       <em>Modèle</em> est comparé avec une partie de chemin ; par exemple une
1156       requête pour "/app1/index.html" entraînera une comparaison avec
1157       "app1/index.html" ou "index.html" selon l'endroit où la directive
1158       <code class="directive">RewriteRule</code> est définie.</p>
1159
1160       <p>Le chemin où la règle est défini est supprimé du chemin correspondant
1161       du système de fichiers avant comparaison (jusqu'au slash final compris).
1162       En conséquence de cette suppression, les règles définies dans
1163       ce contexte n'effectuent des comparaisons qu'avec la portion du chemin
1164       du système de fichiers "en dessous" de l'endroit où la règle est définie.</p>
1165
1166       <p>Le chemin correspondant actuel du système de fichiers est déterminé par
1167       des directives telles que <code class="directive">DocumentRoot</code> et
1168       <code class="directive">Alias</code>, ou même le résultat de substitutions dans
1169       des règles <code class="directive">RewriteRule</code> précédentes.  
1170       </p>
1171       </li>
1172
1173       <li><p>Si vous souhaitez faire une comparaison sur le nom
1174       d'hôte, le port, ou la chaîne de requête, utilisez une
1175       directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
1176       comportant respectivement les variables
1177       <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
1178       <code>%{QUERY_STRING}</code>.</p></li>
1179 </ul>
1180       
1181 </div>
1182
1183 <div class="note"><h3>Réécritures dans un contexte de répertoire</h3>
1184 <ul>
1185 <li>L'utilisation du moteur de réécriture dans les
1186 fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections
1187 <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> est un peu plus
1188 complexe.</li>
1189
1190 <li>Pour activer le moteur de réécriture dans ces contextes, vous devez
1191 définir "<code>RewriteEngine On</code>" <strong>et</strong>
1192 "<code>Options FollowSymLinks</code>". Si l'administrateur a désactivé
1193 la possibilité de modifier l'option <code>FollowSymLinks</code> au
1194 niveau du répertoire d'un utilisateur, vous ne pouvez pas utiliser le
1195 moteur de réécriture. Cette restriction a été instaurée à des fins de
1196 sécurité.</li>
1197
1198 <li>Voir la directive
1199 <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de détails à
1200 propos de l'ajout du préfixe après les substitutions relatives.</li>
1201
1202 <li>Si vous souhaitez effectuer une comparaison en prenant en compte
1203 l'intégralité du
1204 chemin de l'URL dans un contexte de répertoire (htaccess), vous devez
1205 utiliser la variable <code>%{REQUEST_URI}</code> dans la directive
1206 <code class="directive"><a href="#rewritecond">RewriteCond</a></code>.</li>
1207
1208 <li>Le prefixe supprimé se termine toujours par un slash, ce qui
1209 signifie que la comparaison s'effectue avec une chaîne qui ne comporte
1210 <em>jamais</em> de slash de début. Ainsi, un <em>modèle</em> contenant
1211 <code>^/</code> ne correspondra jamais dans un contexte de répertoire.</li>
1212
1213 <li>Bien que les règles de réécriture soient permises du point de vue de
1214 la syntaxe dans les sections <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> et <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code> (y compris leurs versions sous forme
1215 d'expression rationnelle), elles n'y sont pas prises en compte, et
1216 n'y sont à priori d'aucune utilité. Les substitutions
1217 relatives sont une fonctionnalité qui n'est, elle non-plus pas supportée
1218 dans ce genre de contexte.</li>
1219 </ul>
1220 </div>
1221
1222         <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
1223         document <a href="../rewrite/intro.html#regex">Introduction à
1224         mod_rewrite</a>.</p>
1225
1226       <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON
1227       ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
1228       d'inverser la signification d'un modèle, soit pour dire
1229       ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
1230       ce modèle</em>''. Le caractère NON peut donc être utilisé à
1231       titre exceptionnel, lorsqu'il est plus simple d'effectuer une
1232       comparaison avec le modèle inversé, ou dans la dernière règle
1233       par défaut.</p>
1234
1235 <div class="note"><h3>Note</h3>
1236 Si vous utilisez le caractère NON pour inverser la signification d'un
1237 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
1238 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
1239 pas (autrement dit, sa négation correspond), les groupes sont vides.
1240 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
1241 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
1242 substitution !
1243 </div>
1244
1245       <p>Dans une règle de réécriture,
1246       <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
1247       de caractères qui remplace le chemin de l'URL original qui
1248       correspondait au <em>Modèle</em>. <em>Substitution</em> peut
1249       être :</p>
1250
1251       <dl>
1252
1253         <dt>un chemin du système de fichiers</dt>
1254
1255         <dd>Il indique alors la localisation dans le système de
1256         fichiers de la ressource qui doit être envoyée au
1257         client. Les substitutions ne sont traitées en tant que chemins du
1258         système de fichiers que si la règle est configurée dans un
1259         contexte de serveur (serveur virtuel), et si le premier
1260         composant du chemin dans la substitution existe dans le système
1261         de fichiers.</dd>
1262
1263         <dt>chemin d'URL</dt>
1264
1265         <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
1266         doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1267         essaie de deviner si vous avez spécifié un chemin du système
1268         de fichiers ou un chemin d'URL en vérifiant si la première
1269         partie du chemin existe à la racine du système de fichiers.
1270         Par exemple, si vous avez spécifié comme chaîne de
1271         <em>Substitution</em> <code>/www/file.html</code>, cette
1272         dernière sera traitée comme un chemin d'URL <em>à moins</em>
1273         qu'un répertoire nommé <code>www</code> n'existe à la racine
1274         de votre système de fichiers (ou dans le cas d'une
1275         réécriture au sein d'un fichier <code>.htaccess</code>,
1276         relativement à la racine des documents), auquel cas la chaîne de
1277         substitution sera traitée comme un chemin du système de
1278         fichiers. Si vous désirez que d'autres directives de
1279         correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au
1280         chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
1281         comme décrit ci-dessous.</dd>
1282
1283         <dt>URL absolue</dt>
1284
1285         <dd>Si une URL absolue est spécifiée,
1286         <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte
1287         correspond à celui de l'hôte local. Si c'est le cas, le
1288         protocole et le nom d'hôte sont supprimés, et ce qui reste est
1289         traité comme un chemin d'URL. Dans le cas contraire, une
1290         redirection externe vers l'URL indiquée est effectuée. Pour
1291         forcer une redirection externe vers l'hôte local, voir le
1292         drapeau <code>[R]</code> ci-dessous.</dd>
1293
1294         <dt><code>-</code> (tiret)</dt>
1295
1296         <dd>Un tiret indique qu'aucune substitution ne doit être
1297         effectuée (le chemin considéré est transmis sans changement).
1298         Ceci est utile quand un drapeau doit être appliqué sans
1299         modifier le chemin (voir ci-dessous).</dd>
1300
1301       </dl>
1302
1303       <p>En plus du texte, la chaîne <em>Substitution</em> peut
1304       comporter :</p>
1305
1306       <ol>
1307         <li>des références arrières (<code>$N</code>) vers le modèle
1308         d'une directive RewriteRule</li>
1309
1310         <li>des références arrières (<code>%N</code>) vers le dernier
1311         modèle d'une directive RewriteCond qui correspondait</li>
1312
1313         <li>des variables du serveur comme dans les chaînes de test de
1314         condition d'une règle (<code>%{VARNAME}</code>)</li>
1315
1316         <li>des appels de
1317         <a href="#mapfunc">fonctions de comparaison</a>
1318         (<code>${nom correspondance:clé|défaut}</code>)</li>
1319       </ol>
1320
1321       <p>Les références arrières sont des identificateurs de la forme
1322       <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1323       seront remplacés par le contenu du <strong>N</strong>ème groupe
1324       du <em>Modèle</em> qui correspondait. Les variables du serveur
1325       sont les mêmes que dans la <em>Chaîne_de_test</em> d'une
1326       directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>. Les
1327       fonctions de comparaison sont issues de la directive <code class="directive"><a href="#rewritemap">RewriteMap</a></code> dans la
1328       section de laquelle elles sont décrites. Ces trois types de
1329       variables sont évaluées dans l'ordre ci-dessus.</p>
1330
1331        <p>Chaque règle de réécriture s'applique au résultat de la règle
1332        précédente, selon l'ordre dans lequel elles ont été définies dans
1333        le fichier de configuration. Le chemin de l'URL ou du système de fichier (voir
1334        ci-dessus <a href="#what_is_matched">Qu'est-ce qui est
1335        comparé ?</a>) est <strong>intégralement
1336       remplacée</strong> par la chaîne de <em>Substitution</em> et le
1337       processus de réécriture se poursuit jusqu'à ce que toutes les
1338       règles aient été appliquées, ou qu'il soit explicitement stoppé
1339       par un drapeau <a href="../rewrite/flags.html#flag_l"><code><strong>L</strong></code></a>,
1340       ou par un autre drapeau qui implique un arrêt immédiat, comme
1341       <code><strong>END</strong></code> ou
1342       <code><strong>F</strong></code>.</p>
1343
1344      <div class="note"><h3>Modifier la chaîne de requête</h3>
1345       <p>Par défaut, la chaîne de requête est transmise sans
1346       modification. Vous pouvez cependant créer dans la chaîne de
1347       substitution des URLs dont une partie constitue une chaîne de
1348       requête. Pour cela, ajoutez simplement un point d'interrogation
1349       dans la chaîne de substitution pour indiquer que le texte qui
1350       suit doit être réinjecté dans la chaîne de requête. Pour
1351       supprimer une chaîne de requête, terminez simplement la chaîne de
1352       substitution par un point d'interrogation. Pour combiner les
1353       nouvelles chaînes de requête avec les anciennes, utilisez le
1354       drapeau <code>[QSA]</code>.</p>
1355      </div>
1356
1357
1358       <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1359       des
1360       <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1361       comme troisième argument de la directive
1362       <code class="directive">RewriteRule</code>. Séparés par des virgules au sein d'une
1363       liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1364       être choisis dans la table suivante. Vous trouverez plus de
1365       détails, et des exemples pour chaque drapeau dans le <a href="../rewrite/flags.html">document à propos des drapeaux de
1366       réécriture.</a></p>
1367
1368       <table class="bordered"><tr class="header"><th>Drapeaux et syntaxe</th>
1369         <th>Fonction</th>
1370     </tr>
1371 <tr>
1372         <td>B</td>
1373         <td>Echappe les caractères non-alphanumériques
1374         dans les références arrières <em>avant</em>
1375         d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1376     </tr>
1377 <tr class="odd">
1378         <td>backrefnoplus|BNP</td>
1379         <td>Avec ce drapeau, si les références arrières sont échappées,
1380         les espaces seront échappés en %20 au lieu de +. Ceci s'avère
1381         utile lorsqu'une référence arrière est utilisée dans la partie
1382         chemin, et non dans la chaîne de paramètres de la requête ;
1383         pour plus de détails, voir <em><a href="../rewrite/flags.html#flag_bnp">ici.</a></em></td>
1384     </tr>
1385 <tr>        
1386         <td>chain|C</td>
1387         <td>La règle est chaînée avec la règle suivante. Si la règle
1388         échoue, la ou les règles avec lesquelles elle est est chaînée
1389         seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1390     </tr>
1391 <tr class="odd">
1392         <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1393         <td>Définit un cookie au niveau du navigateur client. La syntaxe
1394         complète est :
1395         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>
1396         <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1397         </td>
1398     </tr>
1399 <tr>
1400         <td>discardpath|DPI</td>
1401         <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails
1402         ...</a></em></td>
1403     </tr>
1404 <tr class="odd">
1405         <td>END</td>
1406         <td>Stoppe le processus de réécriture immédiatement et
1407         n'applique plus aucune règle. Empêche aussi l'application
1408         ultérieure de règles de réécriture dans les contextes de
1409         répertoire et de fichier .htaccess (disponible à partir de la
1410         version 2.3.9 du serveur HTTP Apache). <em><a href="../rewrite/flags.html#flag_end">détails ...</a></em></td>
1411     </tr>
1412 <tr>    
1413         <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
1414         <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1415         <em>VAL</em> si elle est fournie). La variante !<em>VAR</em>
1416         annule la définition de la variable <em>VAR</em>.<em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1417     </tr>
1418 <tr class="odd">
1419         <td>forbidden|F</td>
1420         <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1421         <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1422     </tr>
1423 <tr>
1424         <td>gone|G</td>
1425         <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1426     </tr>
1427 <tr class="odd">
1428         <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1429         <td>L'URI résultant est envoyé au <em>Gestionnaire de
1430         contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1431     </tr>
1432 <tr>
1433         <td>last|L</td>
1434         <td>Arrête le processus de réécriture immédiatement et n'applique
1435         plus aucune règle. Prêtez une attention particulière aux mises
1436         en garde concernant les contextes de niveau répertoire et
1437         .htaccess (voir aussi le drapeau END). <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1438     </tr>
1439 <tr class="odd">
1440         <td>next|N</td>
1441         <td>Réexécute le processus de réécriture à partir de la première
1442         règle, en utilisant le résultat du jeu de règles, sous réserve
1443         qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails
1444         ...</a></em></td>
1445     </tr>
1446 <tr>
1447         <td>nocase|NC</td>
1448         <td>Rend la comparaison entre modèles insensible à la casse.
1449         <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1450     </tr>
1451 <tr class="odd">
1452         <td>noescape|NE</td>
1453         <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1454         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>
1455     </tr>
1456 <tr>
1457         <td>nosubreq|NS</td>
1458         <td>La règle est sautée si la requête courante est une
1459         sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1460     </tr>
1461 <tr class="odd">
1462         <td>proxy|P</td>
1463         <td>Force l'envoi en interne de l'URL de substitution en tant
1464         que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails
1465         ...</a></em></td>
1466     </tr>
1467 <tr>
1468         <td>passthrough|PT</td>
1469         <td>L'URI résultant est repassé au moteur de mise en
1470         correspondance des URLs pour y être traité par d'autres
1471         traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1472         <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1473     </tr>
1474 <tr class="odd">
1475         <td>qsappend|QSA</td>
1476         <td>Ajoute toute chaîne de paramètres présente dans l'URL de la
1477         requête originale à toute chaîne de paramètres créée dans la
1478         cible de réécriture. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1479     </tr>
1480 <tr>
1481         <td>qsdiscard|QSD</td>
1482         <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails
1483         ...</a></em></td>
1484     </tr>
1485 <tr class="odd">
1486         <td>qslast|QSL</td>
1487         <td>Interprète le dernier (le plus à droite) point d'interrogation comme
1488         le délimiteur de la chaîne de paramètres de la requête, au lieu du
1489         premier (le plus à gauche) comme c'est le cas habituellement. Disponble
1490         à partir de la version 2.4.19 du serveur HTTP Apache. <em><a href="../rewrite/flags.html#flag_qsl">détails ...</a></em></td>
1491     </tr>
1492 <tr>
1493         <td>redirect|R[=<em>code</em>]</td>
1494         <td>Force une redirection externe, avec un code de statut HTTP
1495         optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em>
1496         </td>
1497     </tr>
1498 <tr class="odd">
1499         <td>skip|S=<em>nombre</em></td>
1500         <td>Si la règle courante s'applique, le moteur de réécriture
1501         doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1502     </tr>
1503 <tr>
1504         <td>type|T=<em>MIME-type</em></td>
1505         <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
1506         spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1507     </tr>
1508 </table>
1509
1510 <div class="note"><h3>Développement du répertoire home</h3>
1511 <p> Quand la chaîne de substitution commence par quelque chose comme
1512 "/~user" (de manière explicite ou par références arrières), mod_rewrite
1513 développe le répertoire home sans tenir compte de la présence ou de la
1514 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
1515
1516 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1517 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
1518 </div>
1519
1520      <p>Voici toutes les combinaisons de substitution et leurs
1521      significations :</p>
1522
1523       <p><strong>Dans la configuration au niveau du serveur principal
1524       (<code>httpd.conf</code>)<br />
1525        pour la requête ``<code>GET
1526       /chemin/infochemin</code>'':</strong><br />
1527       </p>
1528
1529 <table class="bordered"><tr class="header">
1530 <th>Règle</th>
1531 <th>Résultat de la substitution</th>
1532 </tr>
1533 <tr>
1534 <td>^/un_chemin(.*) autre_chemin$1</td>
1535 <td>invalide, non supporté</td>
1536 </tr>
1537 <tr class="odd">
1538 <td>^/un_chemin(.*) autre_chemin$1  [R]</td>
1539 <td>invalide, non supporté</td>
1540 </tr>
1541 <tr>
1542 <td>^/un_chemin(.*) autre_chemin$1  [P]</td>
1543 <td>invalide, non supporté</td>
1544 </tr>
1545 <tr class="odd">
1546 <td>^/un_chemin(.*) /autre_chemin$1</td>
1547 <td>/autre_chemin/info_chemin</td>
1548 </tr>
1549 <tr>
1550 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1551 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1552 </tr>
1553 <tr class="odd">
1554 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1555 <td>sans objet, non supporté</td>
1556 </tr>
1557 <tr>
1558 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1559 <td>/autre_chemin/info_chemin</td>
1560 </tr>
1561 <tr class="odd">
1562 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1563 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1564 </tr>
1565 <tr>
1566 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1567 <td>sans objet, non supporté</td>
1568 </tr>
1569 <tr class="odd">
1570 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1571 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1572 </tr>
1573 <tr>
1574 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1575 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1576 redondant)</td>
1577 </tr>
1578 <tr class="odd">
1579 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1580 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1581 </tr>
1582 </table>
1583
1584       <p><strong>Dans une configuration de niveau répertoire pour
1585       <code>/chemin</code><br />
1586        (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1587       <code>RewriteBase "/chemin"</code>)<br />
1588        pour la requête ``<code>GET
1589       /chemin/chemin-local/infochemin</code>'':</strong><br />
1590      </p>
1591
1592 <table class="bordered"><tr class="header">
1593 <th>Règle</th>
1594 <th>Résultat de la substitution</th>
1595 </tr>
1596 <tr>
1597 <td>^chemin-local(.*) autre-chemin$1</td>
1598 <td>/chemin/autre-chemin/infochemin</td>
1599 </tr>
1600 <tr class="odd">
1601 <td>^chemin-local(.*) autre-chemin$1  [R]</td>
1602 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1603 externe</td>
1604 </tr>
1605 <tr>
1606 <td>^chemin-local(.*) autre-chemin$1  [P]</td>
1607 <td>n'a pas lieu d'être, non supporté</td>
1608 </tr>
1609 <tr class="odd">
1610 <td>^chemin-local(.*) /autre-chemin$1</td>
1611 <td>/autre-chemin/infochemin</td>
1612 </tr>
1613 <tr>
1614 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1615 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1616 </tr>
1617 <tr class="odd">
1618 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1619 <td>n'a pas lieu d'être, non supporté</td>
1620 </tr>
1621 <tr>
1622 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1623 <td>/autre-chemin/infochemin</td>
1624 </tr>
1625 <tr class="odd">
1626 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1627 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1628 </tr>
1629 <tr>
1630 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1631 <td>n'a pas lieu d'être, non supporté</td>
1632 </tr>
1633 <tr class="odd">
1634 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1635 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1636 </tr>
1637 <tr>
1638 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1639 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1640 (le drapeau [R] est redondant)</td>
1641 </tr>
1642 <tr class="odd">
1643 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1644 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1645 </tr>
1646 </table>
1647
1648   
1649 </div>
1650 </div>
1651 <div class="bottomlang">
1652 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
1653 <a href="../fr/mod/mod_rewrite.html" title="Français">&nbsp;fr&nbsp;</a></p>
1654 </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&amp;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>
1655 <script type="text/javascript"><!--//--><![CDATA[//><!--
1656 var comments_shortname = 'httpd';
1657 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html';
1658 (function(w, d) {
1659     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
1660         d.write('<div id="comments_thread"><\/div>');
1661         var s = d.createElement('script');
1662         s.type = 'text/javascript';
1663         s.async = true;
1664         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
1665         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
1666     }
1667     else {
1668         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
1669     }
1670 })(window, document);
1671 //--><!]]></script></div><div id="footer">
1672 <p class="apache">Copyright 2017 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
1673 <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[//><!--
1674 if (typeof(prettyPrint) !== 'undefined') {
1675     prettyPrint();
1676 }
1677 //--><!]]></script>
1678 </body></html>