]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_rewrite.html.fr
Rebuild.
[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       </dl>
1094
1095 </div>
1096 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1097 <div class="directive-section"><h2><a name="rewriterule" id="rewriterule">Directive</a> <a name="RewriteRule" id="RewriteRule">RewriteRule</a></h2>
1098 <table class="directive">
1099 <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>
1100 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
1101       <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
1102 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
1103 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
1104 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
1105 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
1106 </table>
1107       <p>La directive <code class="directive">RewriteRule</code> est le
1108       véritable cheval de trait de la réécriture. La directive peut
1109       apparaître plusieurs fois, chaque instance définissant une
1110       règle de réécriture particulière. L'ordre dans lequel ces règles
1111       sont définies est important - il s'agit de l'ordre dans lequel
1112       les règles seront appliquées au cours du processus de
1113       réécriture.</p>
1114
1115       <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
1116       <a id="regexp" name="regexp">expression rationnelle</a>
1117       compatible perl. Ce avec quoi ce modèle est comparé dépend de l'endroit où
1118       la directive <code class="directive">RewriteRule</code> est définie.</p>
1119
1120 <div class="note"><h3><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est comparé ?</a></h3>
1121
1122 <ul>
1123       <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
1124       d'abord comparé à la portion de l'URL située entre le nom d'hôte
1125       éventuellement accompagné du port, et la chaîne de paramètres (par
1126       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>
1127
1128       <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
1129       <em>Modèle</em> est comparé avec une partie de chemin ; par exemple une
1130       requête pour "/app1/index.html" entraînera une comparaison avec
1131       "app1/index.html" ou "index.html" selon l'endroit où la directive
1132       <code class="directive">RewriteRule</code> est définie.</p>
1133
1134       <p>Le chemin où la règle est défini est supprimé du chemin correspondant
1135       du système de fichiers avant comparaison (jusqu'au slash final compris).
1136       En conséquence de cette suppression, les règles définies dans
1137       ce contexte n'effectuent des comparaisons qu'avec la portion du chemin
1138       du système de fichiers "en dessous" de l'endroit où la règle est définie.</p>
1139
1140       <p>Le chemin correspondant actuel du système de fichiers est déterminé par
1141       des directives telles que <code class="directive">DocumentRoot</code> et
1142       <code class="directive">Alias</code>, ou même le résultat de substitutions dans
1143       des règles <code class="directive">RewriteRule</code> précédentes.  
1144       </p>
1145       </li>
1146
1147       <li><p>Si vous souhaitez faire une comparaison sur le nom
1148       d'hôte, le port, ou la chaîne de requête, utilisez une
1149       directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
1150       comportant respectivement les variables
1151       <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
1152       <code>%{QUERY_STRING}</code>.</p></li>
1153 </ul>
1154       
1155 </div>
1156
1157 <div class="note"><h3>Réécritures dans un contexte de répertoire</h3>
1158 <ul>
1159 <li>L'utilisation du moteur de réécriture dans les
1160 fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections
1161 <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> est un peu plus
1162 complexe.</li>
1163
1164 <li>Pour activer le moteur de réécriture dans ces contextes, vous devez
1165 définir "<code>RewriteEngine On</code>" <strong>et</strong>
1166 "<code>Options FollowSymLinks</code>". Si l'administrateur a désactivé
1167 la possibilité de modifier l'option <code>FollowSymLinks</code> au
1168 niveau du répertoire d'un utilisateur, vous ne pouvez pas utiliser le
1169 moteur de réécriture. Cette restriction a été instaurée à des fins de
1170 sécurité.</li>
1171
1172 <li>Voir la directive
1173 <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de détails à
1174 propos de l'ajout du préfixe après les substitutions relatives.</li>
1175
1176 <li>Si vous souhaitez effectuer une comparaison en prenant en compte
1177 l'intégralité du
1178 chemin de l'URL dans un contexte de répertoire (htaccess), vous devez
1179 utiliser la variable <code>%{REQUEST_URI}</code> dans la directive
1180 <code class="directive"><a href="#rewritecond">RewriteCond</a></code>.</li>
1181
1182 <li>Le prefixe supprimé se termine toujours par un slash, ce qui
1183 signifie que la comparaison s'effectue avec une chaîne qui ne comporte
1184 <em>jamais</em> de slash de début. Ainsi, un <em>modèle</em> contenant
1185 <code>^/</code> ne correspondra jamais dans un contexte de répertoire.</li>
1186
1187 <li>Bien que les règles de réécriture soient permises du point de vue de
1188 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
1189 d'expression rationnelle), elles n'y sont pas prises en compte, et
1190 n'y sont à priori d'aucune utilité. Les substitutions
1191 relatives sont une fonctionnalité qui n'est, elle non-plus pas supportée
1192 dans ce genre de contexte.</li>
1193 </ul>
1194 </div>
1195
1196         <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
1197         document <a href="../rewrite/intro.html#regex">Introduction à
1198         mod_rewrite</a>.</p>
1199
1200       <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON
1201       ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
1202       d'inverser la signification d'un modèle, soit pour dire
1203       ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
1204       ce modèle</em>''. Le caractère NON peut donc être utilisé à
1205       titre exceptionnel, lorsqu'il est plus simple d'effectuer une
1206       comparaison avec le modèle inversé, ou dans la dernière règle
1207       par défaut.</p>
1208
1209 <div class="note"><h3>Note</h3>
1210 Si vous utilisez le caractère NON pour inverser la signification d'un
1211 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
1212 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
1213 pas (autrement dit, sa négation correspond), les groupes sont vides.
1214 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
1215 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
1216 substitution !
1217 </div>
1218
1219       <p>Dans une règle de réécriture,
1220       <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
1221       de caractères qui remplace le chemin de l'URL original qui
1222       correspondait au <em>Modèle</em>. <em>Substitution</em> peut
1223       être :</p>
1224
1225       <dl>
1226
1227         <dt>un chemin du système de fichiers</dt>
1228
1229         <dd>Il indique alors la localisation dans le système de
1230         fichiers de la ressource qui doit être envoyée au
1231         client. Les substitutions ne sont traitées en tant que chemins du
1232         système de fichiers que si la règle est configurée dans un
1233         contexte de serveur (serveur virtuel), et si le premier
1234         composant du chemin dans la substitution existe dans le système
1235         de fichiers.</dd>
1236
1237         <dt>chemin d'URL</dt>
1238
1239         <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
1240         doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1241         essaie de deviner si vous avez spécifié un chemin du système
1242         de fichiers ou un chemin d'URL en vérifiant si la première
1243         partie du chemin existe à la racine du système de fichiers.
1244         Par exemple, si vous avez spécifié comme chaîne de
1245         <em>Substitution</em> <code>/www/file.html</code>, cette
1246         dernière sera traitée comme un chemin d'URL <em>à moins</em>
1247         qu'un répertoire nommé <code>www</code> n'existe à la racine
1248         de votre système de fichiers (ou dans le cas d'une
1249         réécriture au sein d'un fichier <code>.htaccess</code>,
1250         relativement à la racine des documents), auquel cas la chaîne de
1251         substitution sera traitée comme un chemin du système de
1252         fichiers. Si vous désirez que d'autres directives de
1253         correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au
1254         chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
1255         comme décrit ci-dessous.</dd>
1256
1257         <dt>URL absolue</dt>
1258
1259         <dd>Si une URL absolue est spécifiée,
1260         <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte
1261         correspond à celui de l'hôte local. Si c'est le cas, le
1262         protocole et le nom d'hôte sont supprimés, et ce qui reste est
1263         traité comme un chemin d'URL. Dans le cas contraire, une
1264         redirection externe vers l'URL indiquée est effectuée. Pour
1265         forcer une redirection externe vers l'hôte local, voir le
1266         drapeau <code>[R]</code> ci-dessous.</dd>
1267
1268         <dt><code>-</code> (tiret)</dt>
1269
1270         <dd>Un tiret indique qu'aucune substitution ne doit être
1271         effectuée (le chemin considéré est transmis sans changement).
1272         Ceci est utile quand un drapeau doit être appliqué sans
1273         modifier le chemin (voir ci-dessous).</dd>
1274
1275       </dl>
1276
1277       <p>En plus du texte, la chaîne <em>Substitution</em> peut
1278       comporter :</p>
1279
1280       <ol>
1281         <li>des références arrières (<code>$N</code>) vers le modèle
1282         d'une directive RewriteRule</li>
1283
1284         <li>des références arrières (<code>%N</code>) vers le dernier
1285         modèle d'une directive RewriteCond qui correspondait</li>
1286
1287         <li>des variables du serveur comme dans les chaînes de test de
1288         condition d'une règle (<code>%{VARNAME}</code>)</li>
1289
1290         <li>des appels de
1291         <a href="#mapfunc">fonctions de comparaison</a>
1292         (<code>${nom correspondance:clé|défaut}</code>)</li>
1293       </ol>
1294
1295       <p>Les références arrières sont des identificateurs de la forme
1296       <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1297       seront remplacés par le contenu du <strong>N</strong>ème groupe
1298       du <em>Modèle</em> qui correspondait. Les variables du serveur
1299       sont les mêmes que dans la <em>Chaîne_de_test</em> d'une
1300       directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>. Les
1301       fonctions de comparaison sont issues de la directive <code class="directive"><a href="#rewritemap">RewriteMap</a></code> dans la
1302       section de laquelle elles sont décrites. Ces trois types de
1303       variables sont évaluées dans l'ordre ci-dessus.</p>
1304
1305        <p>Chaque règle de réécriture s'applique au résultat de la règle
1306        précédente, selon l'ordre dans lequel elles ont été définies dans
1307        le fichier de configuration. Le chemin de l'URL ou du système de fichier (voir
1308        ci-dessus <a href="#what_is_matched">Qu'est-ce qui est
1309        comparé ?</a>) est <strong>intégralement
1310       remplacée</strong> par la chaîne de <em>Substitution</em> et le
1311       processus de réécriture se poursuit jusqu'à ce que toutes les
1312       règles aient été appliquées, ou qu'il soit explicitement stoppé
1313       par un drapeau <a href="../rewrite/flags.html#flag_l"><code><strong>L</strong></code></a>,
1314       ou par un autre drapeau qui implique un arrêt immédiat, comme
1315       <code><strong>END</strong></code> ou
1316       <code><strong>F</strong></code>.</p>
1317
1318      <div class="note"><h3>Modifier la chaîne de requête</h3>
1319       <p>Par défaut, la chaîne de requête est transmise sans
1320       modification. Vous pouvez cependant créer dans la chaîne de
1321       substitution des URLs dont une partie constitue une chaîne de
1322       requête. Pour cela, ajoutez simplement un point d'interrogation
1323       dans la chaîne de substitution pour indiquer que le texte qui
1324       suit doit être réinjecté dans la chaîne de requête. Pour
1325       supprimer une chaîne de requête, terminez simplement la chaîne de
1326       substitution par un point d'interrogation. Pour combiner les
1327       nouvelles chaînes de requête avec les anciennes, utilisez le
1328       drapeau <code>[QSA]</code>.</p>
1329      </div>
1330
1331
1332       <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1333       des
1334       <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1335       comme troisième argument de la directive
1336       <code class="directive">RewriteRule</code>. Séparés par des virgules au sein d'une
1337       liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1338       être choisis dans la table suivante. Vous trouverez plus de
1339       détails, et des exemples pour chaque drapeau dans le <a href="../rewrite/flags.html">document à propos des drapeaux de
1340       réécriture.</a></p>
1341
1342       <table class="bordered"><tr class="header"><th>Drapeaux et syntaxe</th>
1343         <th>Fonction</th>
1344     </tr>
1345 <tr>
1346         <td>B</td>
1347         <td>Echappe les caractères non-alphanumériques
1348         dans les références arrières <em>avant</em>
1349         d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1350     </tr>
1351 <tr class="odd">
1352         <td>backrefnoplus|BNP</td>
1353         <td>Avec ce drapeau, si les références arrières sont échappées,
1354         les espaces seront échappés en %20 au lieu de +. Ceci s'avère
1355         utile lorsqu'une référence arrière est utilisée dans la partie
1356         chemin, et non dans la chaîne de paramètres de la requête ;
1357         pour plus de détails, voir <em><a href="../rewrite/flags.html#flag_bnp">ici.</a></em></td>
1358     </tr>
1359 <tr>        
1360         <td>chain|C</td>
1361         <td>La règle est chaînée avec la règle suivante. Si la règle
1362         échoue, la ou les règles avec lesquelles elle est est chaînée
1363         seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1364     </tr>
1365 <tr class="odd">
1366         <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1367         <td>Définit un cookie au niveau du navigateur client. La syntaxe
1368         complète est :
1369         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>
1370         <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1371         </td>
1372     </tr>
1373 <tr>
1374         <td>discardpath|DPI</td>
1375         <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails
1376         ...</a></em></td>
1377     </tr>
1378 <tr class="odd">
1379         <td>END</td>
1380         <td>Stoppe le processus de réécriture immédiatement et
1381         n'applique plus aucune règle. Empêche aussi l'application
1382         ultérieure de règles de réécriture dans les contextes de
1383         répertoire et de fichier .htaccess (disponible à partir de la
1384         version 2.3.9 du serveur HTTP Apache). <em><a href="../rewrite/flags.html#flag_end">détails ...</a></em></td>
1385     </tr>
1386 <tr>    
1387         <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
1388         <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1389         <em>VAL</em> si elle est fournie). La variante !<em>VAR</em>
1390         annule la définition de la variable <em>VAR</em>.<em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1391     </tr>
1392 <tr class="odd">
1393         <td>forbidden|F</td>
1394         <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1395         <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1396     </tr>
1397 <tr>
1398         <td>gone|G</td>
1399         <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1400     </tr>
1401 <tr class="odd">
1402         <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1403         <td>L'URI résultant est envoyé au <em>Gestionnaire de
1404         contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1405     </tr>
1406 <tr>
1407         <td>last|L</td>
1408         <td>Arrête le processus de réécriture immédiatement et n'applique
1409         plus aucune règle. Prêtez une attention particulière aux mises
1410         en garde concernant les contextes de niveau répertoire et
1411         .htaccess (voir aussi le drapeau END). <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1412     </tr>
1413 <tr class="odd">
1414         <td>next|N</td>
1415         <td>Réexécute le processus de réécriture à partir de la première
1416         règle, en utilisant le résultat du jeu de règles, sous réserve
1417         qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails
1418         ...</a></em></td>
1419     </tr>
1420 <tr>
1421         <td>nocase|NC</td>
1422         <td>Rend la comparaison entre modèles insensible à la casse.
1423         <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1424     </tr>
1425 <tr class="odd">
1426         <td>noescape|NE</td>
1427         <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1428         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>
1429     </tr>
1430 <tr>
1431         <td>nosubreq|NS</td>
1432         <td>La règle est sautée si la requête courante est une
1433         sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1434     </tr>
1435 <tr class="odd">
1436         <td>proxy|P</td>
1437         <td>Force l'envoi en interne de l'URL de substitution en tant
1438         que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails
1439         ...</a></em></td>
1440     </tr>
1441 <tr>
1442         <td>passthrough|PT</td>
1443         <td>L'URI résultant est repassé au moteur de mise en
1444         correspondance des URLs pour y être traité par d'autres
1445         traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1446         <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1447     </tr>
1448 <tr class="odd">
1449         <td>qsappend|QSA</td>
1450         <td>Ajoute toute chaîne de paramètres présente dans l'URL de la
1451         requête originale à toute chaîne de paramètres créée dans la
1452         cible de réécriture. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1453     </tr>
1454 <tr>
1455         <td>qsdiscard|QSD</td>
1456         <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails
1457         ...</a></em></td>
1458     </tr>
1459 <tr class="odd">
1460         <td>qslast|QSL</td>
1461         <td>Interprète le dernier (le plus à droite) point d'interrogation comme
1462         le délimiteur de la chaîne de paramètres de la requête, au lieu du
1463         premier (le plus à gauche) comme c'est le cas habituellement. Disponble
1464         à partir de la version 2.4.19 du serveur HTTP Apache. <em><a href="../rewrite/flags.html#flag_qsl">détails ...</a></em></td>
1465     </tr>
1466 <tr>
1467         <td>redirect|R[=<em>code</em>]</td>
1468         <td>Force une redirection externe, avec un code de statut HTTP
1469         optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em>
1470         </td>
1471     </tr>
1472 <tr class="odd">
1473         <td>skip|S=<em>nombre</em></td>
1474         <td>Si la règle courante s'applique, le moteur de réécriture
1475         doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1476     </tr>
1477 <tr>
1478         <td>type|T=<em>MIME-type</em></td>
1479         <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
1480         spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1481     </tr>
1482 </table>
1483
1484 <div class="note"><h3>Développement du répertoire home</h3>
1485 <p> Quand la chaîne de substitution commence par quelque chose comme
1486 "/~user" (de manière explicite ou par références arrières), mod_rewrite
1487 développe le répertoire home sans tenir compte de la présence ou de la
1488 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
1489
1490 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1491 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
1492 </div>
1493
1494      <p>Voici toutes les combinaisons de substitution et leurs
1495      significations :</p>
1496
1497       <p><strong>Dans la configuration au niveau du serveur principal
1498       (<code>httpd.conf</code>)<br />
1499        pour la requête ``<code>GET
1500       /chemin/infochemin</code>'':</strong><br />
1501       </p>
1502
1503 <table class="bordered"><tr class="header">
1504 <th>Règle</th>
1505 <th>Résultat de la substitution</th>
1506 </tr>
1507 <tr>
1508 <td>^/un_chemin(.*) autre_chemin$1</td>
1509 <td>invalide, non supporté</td>
1510 </tr>
1511 <tr class="odd">
1512 <td>^/un_chemin(.*) autre_chemin$1  [R]</td>
1513 <td>invalide, non supporté</td>
1514 </tr>
1515 <tr>
1516 <td>^/un_chemin(.*) autre_chemin$1  [P]</td>
1517 <td>invalide, non supporté</td>
1518 </tr>
1519 <tr class="odd">
1520 <td>^/un_chemin(.*) /autre_chemin$1</td>
1521 <td>/autre_chemin/info_chemin</td>
1522 </tr>
1523 <tr>
1524 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1525 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1526 </tr>
1527 <tr class="odd">
1528 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1529 <td>sans objet, non supporté</td>
1530 </tr>
1531 <tr>
1532 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1533 <td>/autre_chemin/info_chemin</td>
1534 </tr>
1535 <tr class="odd">
1536 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1537 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1538 </tr>
1539 <tr>
1540 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1541 <td>sans objet, non supporté</td>
1542 </tr>
1543 <tr class="odd">
1544 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1545 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1546 </tr>
1547 <tr>
1548 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1549 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1550 redondant)</td>
1551 </tr>
1552 <tr class="odd">
1553 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1554 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1555 </tr>
1556 </table>
1557
1558       <p><strong>Dans une configuration de niveau répertoire pour
1559       <code>/chemin</code><br />
1560        (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1561       <code>RewriteBase "/chemin"</code>)<br />
1562        pour la requête ``<code>GET
1563       /chemin/chemin-local/infochemin</code>'':</strong><br />
1564      </p>
1565
1566 <table class="bordered"><tr class="header">
1567 <th>Règle</th>
1568 <th>Résultat de la substitution</th>
1569 </tr>
1570 <tr>
1571 <td>^chemin-local(.*) autre-chemin$1</td>
1572 <td>/chemin/autre-chemin/infochemin</td>
1573 </tr>
1574 <tr class="odd">
1575 <td>^chemin-local(.*) autre-chemin$1  [R]</td>
1576 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1577 externe</td>
1578 </tr>
1579 <tr>
1580 <td>^chemin-local(.*) autre-chemin$1  [P]</td>
1581 <td>n'a pas lieu d'être, non supporté</td>
1582 </tr>
1583 <tr class="odd">
1584 <td>^chemin-local(.*) /autre-chemin$1</td>
1585 <td>/autre-chemin/infochemin</td>
1586 </tr>
1587 <tr>
1588 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1589 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1590 </tr>
1591 <tr class="odd">
1592 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1593 <td>n'a pas lieu d'être, non supporté</td>
1594 </tr>
1595 <tr>
1596 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1597 <td>/autre-chemin/infochemin</td>
1598 </tr>
1599 <tr class="odd">
1600 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1601 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1602 </tr>
1603 <tr>
1604 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1605 <td>n'a pas lieu d'être, non supporté</td>
1606 </tr>
1607 <tr class="odd">
1608 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1609 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1610 </tr>
1611 <tr>
1612 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1613 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1614 (le drapeau [R] est redondant)</td>
1615 </tr>
1616 <tr class="odd">
1617 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1618 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1619 </tr>
1620 </table>
1621
1622   
1623 </div>
1624 </div>
1625 <div class="bottomlang">
1626 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
1627 <a href="../fr/mod/mod_rewrite.html" title="Français">&nbsp;fr&nbsp;</a></p>
1628 </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>
1629 <script type="text/javascript"><!--//--><![CDATA[//><!--
1630 var comments_shortname = 'httpd';
1631 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html';
1632 (function(w, d) {
1633     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
1634         d.write('<div id="comments_thread"><\/div>');
1635         var s = d.createElement('script');
1636         s.type = 'text/javascript';
1637         s.async = true;
1638         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
1639         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
1640     }
1641     else {
1642         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
1643     }
1644 })(window, document);
1645 //--><!]]></script></div><div id="footer">
1646 <p class="apache">Copyright 2016 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
1647 <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[//><!--
1648 if (typeof(prettyPrint) !== 'undefined') {
1649     prettyPrint();
1650 }
1651 //--><!]]></script>
1652 </body></html>