]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_rewrite.html.fr
Fix xml validation error
[apache] / docs / manual / mod / mod_rewrite.html.fr
1 <?xml version="1.0" encoding="UTF-8"?>
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=UTF-8" 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 HTTP Apache 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 HTTP Apache 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><a title="Lien permanent" href="#logging" class="permalink">&para;</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><a title="Lien permanent" href="#rewritebase" class="permalink">&para;</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">Surcharges autorisées:</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><a title="Lien permanent" href="#rewritecond" class="permalink">&para;</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 globale, serveur virtuel, répertoire, .htaccess</td></tr>
186 <tr><th><a href="directive-dict.html#Override">Surcharges autorisées:</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 à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, 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 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
492         opère).</p>
493         <p>Par contre, comme <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> implémente son contexte de
494         répertoire (fichier <code>.htaccess</code>) via la phase Fixup
495         de l'API, et comme la phase d'autorisation intervient
496         <em>avant</em> cette dernière, vous pouvez vous contenter
497         d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
498
499         <li>
500         <code>%{LA-F:variable}</code> peut être utilisée pour effectuer
501         une sous-requête interne (basée sur le nom de fichier), afin de
502         déterminer la valeur finale de <em>variable</em>. La plupart du
503         temps, elle est identique à LA-U (voir ci-dessus).</li>
504       </ol>
505
506
507       <p><em>expression_de_comparaison</em> est une expression
508       rationnelle qui est appliquée à l'instance actuelle de
509       <em>chaîne_de_test</em>. <em>chaîne_de_test</em> est d'abord
510       évaluée, puis comparée à
511       l'<em>expression_de_comparaison</em>.</p>
512
513       <p><em>expression_de_comparaison</em> est en général une
514       <em>expression rationnelle compatible perl</em>, mais vous
515       disposez des syntaxes supplémentaires suivantes pour effectuer
516       d'autres tests utiles sur <em>chaîne_de_test</em> :
517       </p>
518
519       <ol>
520         <li>Vous pouvez préfixer l'expression avec un caractère
521         '<code>!</code>' (point d'exclamation) pour inverser le résultat
522         de la condition, quelle que soit l'<em>expression de
523         comparaison</em> utilisée.</li>
524
525         <li>Vous pouvez effectuer des comparaisons lexicographiques de
526         chaînes        :
527
528          <dl>
529             <dt><strong>&lt;expression</strong></dt>
530             <dd>inférieur au sens lexicographique<br />
531             Traite l'<em>expression</em> comme une chaîne de
532             caractères et la compare lexicographiquement à
533             <em>chaîne_de_test</em>. La condition est satisfaite si
534             <em>chaîne_de_test</em> est inférieure au sens
535             lexicographique à l'<em>expression</em>.</dd>
536
537             <dt><strong>&gt;expression</strong></dt>
538             <dd>supérieur au sens lexicographique<br />
539             Traite l'<em>expression</em> comme une chaîne de
540             caractères et la compare lexicographiquement à
541             <em>chaîne_de_test</em>. La condition est satisfaite si
542             <em>chaîne_de_test</em> est supérieure au sens
543             lexicographique à l'<em>expression</em>.</dd>
544
545             <dt><strong>=expression</strong></dt>
546             <dd>égal au sens lexicographique<br />
547             Traite l'<em>expression</em> comme une chaîne de
548             caractères et la compare lexicographiquement à
549             <em>chaîne_de_test</em>. La condition est satisfaite si
550             <em>chaîne_de_test</em> est égale au sens
551             lexicographique à l'<em>expression</em> (les deux chaînes
552             sont exactement identiques, caractère pour caractère). Si
553             <em>expression</em> est <code>""</code> (deux guillemets),
554             <em>chaîne_de_test</em> est comparée à la
555             chaîne vide.</dd>
556
557             <dt><strong>&lt;=expression de comparaison</strong></dt>
558             <dd>inférieur ou égal à au sens lexicographique<br />
559             Considère l'<em>expression_de_comparaison</em> comme une
560             chaîne de caractères et la compare au sens lexicographique à
561             la <em>chaîne_de_test</em>. Vrai si <em>chaîne_de_test</em>
562             précède lexicographiquement <em>expression_de_comparaison</em>, ou est
563             égale à <em>expression_de_comparaison</em> (les deux chaînes
564             sont identiques, caractère pour caractère).</dd>
565
566             <dt><strong>&gt;=expression de comparaison</strong></dt>
567             <dd>supérieur ou égal à au sens lexicographique<br />
568             Considère l'<em>expression_de_comparaison</em> comme une
569             chaîne de caractères et la compare au sens lexicographique à
570             la <em>chaîne_de_test</em>. Vrai si <em>chaîne_de_test</em>
571             suit lexicographiquement <em>expression_de_comparaison</em>, ou est
572             égale à <em>expression_de_comparaison</em> (les deux chaînes
573             sont identiques, caractère pour caractère).</dd>
574         </dl>
575         </li>
576
577         <li>
578           Vous pouvez effectuer des comparaisons d'entiers :
579           <dl>
580
581             <dt><strong>-eq</strong></dt>
582             <dd>est numériquement égal à<br />
583             La <em>chaîne_de_test</em> est considérée comme un entier,
584             et est comparée numériquement à l'<em>expression de
585             comparaison</em>. Vrai si les deux expressions sont
586             numériquement égales.</dd>
587
588             <dt><strong>-ge</strong></dt>
589             <dd>est numériquement supérieur ou égal à<br />
590             La <em>chaîne_de_test</em> est considérée comme un entier,
591             et est comparée numériquement à l'<em>expression de
592             comparaison</em>. Vrai si <em>chaîne_de_test</em> est
593             numériquement supérieure ou égale à
594             <em>expression_de_comparaison</em>.</dd>
595
596              <dt><strong>-gt</strong></dt>
597              <dd>est numériquement supérieur à<br />
598             La <em>chaîne_de_test</em> est considérée comme un entier,
599             et est comparée numériquement à l'<em>expression de
600             comparaison</em>. Vrai si <em>chaîne_de_test</em> est
601             numériquement
602             supérieure à <em>expression_de_comparaison</em>.</dd>
603
604             <dt><strong>-le</strong></dt>
605             <dd>est numériquement inférieur ou égal à<br />
606             La <em>chaîne_de_test</em> est considérée comme un entier,
607             et est comparée numériquement à l'<em>expression de
608             comparaison</em>. Vrai si <em>chaîne_de_test</em> est
609             numériquement
610             inférieure ou égale à <em>expression_de_comparaison</em>.
611             Attention à la confusion avec le drapeau <strong>-l</strong>
612             en utilisant la variante the <strong>-L</strong> ou
613             <strong>-h</strong>.</dd>
614
615              <dt><strong>-lt</strong></dt>
616              <dd>est numériquement inférieur à<br />
617             La <em>chaîne_de_test</em> est considérée comme un entier,
618             et est comparée numériquement à l'<em>expression de
619             comparaison</em>. Vrai si <em>chaîne_de_test</em> est
620             numériquement
621             inférieure à <em>expression_de_comparaison</em>.
622             Attention à la confusion avec le drapeau <strong>-l</strong>
623             en utilisant la variante the <strong>-L</strong> ou
624             <strong>-h</strong>.</dd>
625
626             <dt><strong>-ne</strong></dt>
627             <dd>Est numériquement <strong>n</strong>on <strong>é</strong>gal à<br />
628              La <em>Chaîne de test</em> est considérée comme un entier et est
629              numériquement comparée à l'<em>expression de comparaison</em>. Vrai
630              si les deux éléments comparés sont numériquement différents.
631              Equivalent à <code>!-eq</code>.</dd>          
632
633            </dl>
634         </li>
635
636         <li>Vous pouvez effectuer différents tests sur les attributs de
637         fichier :
638           <dl>
639
640             <dt><strong>-d</strong></dt>
641             <dd>est un <strong>r</strong>épertoire<br />
642             Traite <em>chaîne_de_test</em> comme un chemin et vérifie
643             s'il existe ou pas, et s'il s'agit d'un répertoire.</dd>
644
645             <dt><strong>-f</strong></dt>
646             <dd>est un <strong>f</strong>ichier régulier<br />
647             Traite <em>chaîne_de_test</em> comme un chemin et vérifie
648             s'il existe ou pas, et s'il s'agit d'un fichier régulier.</dd>
649
650             <dt><strong>-F</strong></dt>
651             <dd>test de l'existence d'un fichier via une sous-requête<br />
652             Vérifie si <em>chaîne_de_test</em> est un fichier valide,
653             accessible à travers tous les contrôles d'accès du serveur
654             actuellement configurés pour ce chemin. C'est une
655             sous-requête interne qui effectue cette vérification - à
656             utiliser avec précautions car les performances du serveur
657             peuvent s'en trouver affectées !</dd>
658
659             <dt><strong>-h</strong></dt>
660             <dd>est un lien symbolique, selon la convention bash<br />
661             Voir <strong>-l</strong>.</dd>
662
663             <dt><strong>-l</strong></dt>
664             <dd>est un <strong>l</strong>ien symbolique<br />
665             Considère la <em>chaîne_de_test</em> comme un chemin et
666             vérifie son existence et si elle est un lien symbolique. On
667             peut aussi utiliser la convention bash <strong>-L</strong>
668             ou <strong>-h</strong> lorsqu'il y a risque de confusion
669             avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</dd>
670
671             <dt><strong>-L</strong></dt>
672             <dd>est un lien symbolique, selon la convention bash<br />
673             Voir <strong>-l</strong>.</dd>
674
675             <dt><strong>-s</strong></dt>
676             <dd>est un fichier régulier d'une certaine taille<br />
677             Considère la <em>chaîne_de_test</em> comme un chemin et
678             vérifie son existence et si elle est un fichier régulier
679             d'une taille supérieure à zéro.</dd>
680
681             <dt><strong>-U</strong></dt>
682             <dd><p>test de l'existence d'une
683             URL via une sous-requête<br />
684             Vérifie si <em>chaîne_de_test</em> est une URL valide,
685             accessible à travers tous les contrôles d'accès du serveur
686             actuellement configurés pour ce chemin. C'est une
687             sous-requête interne qui effectue cette vérification - à
688             utiliser avec précautions car les performances du serveur
689             peuvent s'en trouver affectées !</p>
690             <p>Ce drapeau ne renvoie <em>que</em> des informations
691             concernant le contrôle d'accès, l'authentification et
692             l'autorisation. Il ne renvoie <em>pas</em> d'informations
693             concernant le code d'état que le gestionnaire configuré
694             (static file, CGI, proxy, etc...) aurait, quant à lui,
695             retourné.</p></dd>
696
697           <dt><strong>-x</strong></dt>
698           <dd>a l'attribut d'exécution positionné<br />
699             Considère la <em>chaîne_de_test</em> comme un chemin et
700             vérifie son existence et si elle a son attribut d'exécution
701             positionné. Ce positionnement est déterminé en fonction de
702             l'OS sous-jacent.</dd>
703
704             </dl>
705
706             Par exemple:
707
708         <pre class="prettyprint lang-config">RewriteCond /var/www/%{REQUEST_URI} !-f
709 RewriteRule ^(.+) /other/archive/$1 [R]</pre>
710
711
712         </li>
713
714         <li>
715            <p>Si la <em>chaîne_de_test</em> contient la valeur spéciale
716            <code>expr</code>, la <em>chaîne de comparaison</em> sera
717            traitée en tant qu'expression rationnelle de type <a href="../expr.html">ap_expr</a>.</p>
718
719            <p>
720             Dans l'exemple ci-dessous, on utilise <code>-strmatch</code>
721             pour comparer le <code>REFERER</code> avec le nom d'hôte du
722             site afin de bloquer le hotlinking (référencement direct)
723             non désiré.
724            </p>
725
726            <pre class="prettyprint lang-config">           RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
727            RewriteRule "^/images" "-" [F]</pre>
728
729         </li>
730     </ol>
731
732         <p>Vous pouvez aussi définir certains drapeaux pour
733         l'<em>expression_de_comparaison</em> en ajoutant ces
734         <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
735         comme troisième argument de la directive
736         <code class="directive">RewriteCond</code>, où <em>drapeaux</em> est un
737         sous-ensemble séparé par des virgules des drapeaux suivants :</p>
738
739       <ul>
740         <li>'<strong><code>nocase|NC</code></strong>'
741         (<strong>n</strong>o <strong>c</strong>ase)<br />
742         Rend le test insensible à la casse - il n'est pas fait de
743         distinction entre majuscules et minuscules, à la fois dans le
744         développement de <em>chaîne_de_test</em> et dans
745         <em>expression_de_comparaison</em>. Ce drapeau n'est pris en
746         compte que lors d'une comparaison entre <em>chaîne_de_test</em>
747         et <em>expression_de_comparaison</em>. Il ne l'est pas pour les
748         vérification par sous-requêtes ou sur le système de
749         fichiers.</li>
750
751         <li>
752           '<strong><code>ornext|OR</code></strong>'
753           (<strong>ou</strong> condition suivante)<br />
754           Permet de chaîner les conditions de règles avec un OU au
755           lieu du AND implicite. Exemple typique :
756
757 <pre class="prettyprint lang-config">RewriteCond "%{REMOTE_HOST}"  "^host1"  [OR]
758 RewriteCond "%{REMOTE_HOST}"  "^host2"  [OR]
759 RewriteCond "%{REMOTE_HOST}"  "^host3"
760 RewriteRule ...règles concernant tous ces hôtes...</pre>
761
762
763           Sans ce drapeau, les paires
764           condition/règle devraient être écrites trois fois.
765         </li>
766
767         <li>'<strong><code>novary|NV</code></strong>'
768         (<strong>n</strong>o <strong>v</strong>ary)<br />
769         Si la condition contient un en-tête HTTP, ce drapeau empêche
770         ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br />
771         L'utilisation de ce drapeau peut provoquer une mise en cache
772         incorrecte de la réponse, si la représentation de cette réponse
773         varie avec la valeur de l'en-tête considéré. Ce drapeau ne
774         devrait donc être utilisé que si l'on maîtrise parfaitement le
775         fonctionnement de l'en-tête Vary.
776         </li>
777       </ul>
778       
779
780       <p><strong>Exemple :</strong></p>
781
782        <p>Pour réécrire la page d'accueil d'un site en fonction de
783        l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
784        pouvez utiliser ce qui suit : </p>
785
786 <pre class="prettyprint lang-config">RewriteCond  "%{HTTP_USER_AGENT}"  "(iPhone|Blackberry|Android)"
787 RewriteRule  "^/$"               "/homepage.mobile.html"  [L]
788
789 RewriteRule  "^/$"                 "/homepage.std.html"  [L]</pre>
790
791
792         <p>Explications : si vous utilisez un navigateur
793         qui s'identifie comme un
794         navigateur de plateforme mobile (notez que l'exemple est
795         incomplet car il existe de nombreuses autres plateformes
796         mobiles), c'est la version pour mobile de la page d'accueil qui
797         sera renvoyée. Dans le cas contraire, ce sera la page d'accueil
798         standard.</p>
799
800
801 </div>
802 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
803 <div class="directive-section"><h2><a name="rewriteengine" id="rewriteengine">Directive</a> <a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a><a title="Lien permanent" href="#rewriteengine" class="permalink">&para;</a></h2>
804 <table class="directive">
805 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active ou désactive l'exécution du
806 moteur de réécriture</td></tr>
807 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteEngine on|off</code></td></tr>
808 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>RewriteEngine off</code></td></tr>
809 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
810 <tr><th><a href="directive-dict.html#Override">Surcharges autorisées:</a></th><td>FileInfo</td></tr>
811 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
812 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
813 </table>
814
815       <p>La directive <code class="directive">RewriteEngine</code> active ou
816       désactive l'exécution du moteur de réécriture. Si sa valeur est
817       <code>off</code>, ce module n'exécutera aucun traitement et ne
818       mettra pas à jour les variables d'environnement
819       <code>SCRIPT_URx</code>.</p>
820
821       <p>Plutôt que de commenter toutes les directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code>, il est préférable
822       d'utiliser cette directive si l'on souhaite désactiver les
823       règles de réécriture dans un contexte particulier.</p>
824
825       <p>Notez que les  hôtes virtuels n'héritent pas des
826       configurations de réécriture. Ceci implique que vous devez
827       insérer une directive <code>RewriteEngine on</code> dans chaque
828       hôte virtuel pour lequel vous souhaitez utiliser des règles
829       de réécriture.</p>
830
831       <p>Les directives <code class="directive"><a href="#rewritemap">RewriteMap</a></code> du type
832       <code>prg</code> ne sont pas prises en compte au cours de
833       l'initialisation du serveur si elle ont été définies dans un
834       contexte où la directive <code class="directive">RewriteEngine</code> n'a
835       pas été définie à <code>on</code>.</p>
836
837
838 </div>
839 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
840 <div class="directive-section"><h2><a name="rewritemap" id="rewritemap">Directive</a> <a name="RewriteMap" id="RewriteMap">RewriteMap</a><a title="Lien permanent" href="#rewritemap" class="permalink">&para;</a></h2>
841 <table class="directive">
842 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une fonction de mise en correspondance pour la
843 recherche de mots-clés</td></tr>
844 <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>]
845 </code></td></tr>
846 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
847 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
848 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
849 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Le troisième paramètre, MapTypeOptions, est disponible à partir
850 de la version 2.4.29 du serveur HTTP Apache</td></tr>
851 </table>
852       <p>La directive <code class="directive">RewriteMap</code> définit une
853       <em>Table de correspondance pour la réécriture</em> que les
854       fonctions de mise en correspondance
855       peuvent utiliser dans les chaînes de substitution des règles
856       pour insérer/substituer des champs en recherchant des mots-clés.
857       La source utilisée pour cette recherche peut être de plusieurs
858       types.</p>
859
860       <p><a id="mapfunc" name="mapfunc"><em>MapName</em></a> est le nom de la table de correspondance
861       et servira à spécifier une fonction de mise en correspondance
862       pour les chaînes de substitution d'une règle de réécriture selon
863       une des constructions suivantes :</p>
864
865       <p class="indent">
866         <strong><code>${</code> <em>MapName</em> <code>:</code>
867         <em>mot-clé</em> <code>}</code><br />
868          <code>${</code> <em>MapName</em> <code>:</code>
869         <em>mot-clé</em> <code>|</code> <em>valeur par défaut</em>
870         <code>}</code></strong>
871       </p>
872
873       <p>Lorsqu'une telle construction est rencontrée, la table de
874       correspondance <em>MapName</em> est consultée
875       et la clé <em>mot-clé</em> recherchée. Si la clé est trouvée, la
876       construction est remplacée par
877       la <em>valeur de remplacement</em>. Si la clé n'est pas trouvée,
878       elle est remplacée par la <em>valeur par défaut</em>, ou par une
879       chaîne vide si aucune <em>valeur par défaut</em> n'est
880       spécifiée. La valeur vide se comporte comme si la
881       clé était absente ; il est donc impossible de distinguer une
882       valeur vide d'une absence de clé.</p>
883
884       <p>Par exemple, vous pouvez définir une directive
885       <code class="directive">RewriteMap</code> comme suit </p>
886
887       <pre class="prettyprint lang-config">RewriteMap map-exemple "txt:/chemin/vers/fichier/map.txt"</pre>
888
889
890       <p>Vous pourrez ensuite utiliser cette table dans une
891       directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code> comme suit :</p>
892
893       <pre class="prettyprint lang-config">RewriteRule "^/ex/(.*)" "${map-exemple:$1}"</pre>
894
895
896       <p>La signification de l'argument <em>MapTypeOptions</em> dépend du <em>MapType</em>
897       spécifié. Veuillez vous référer au document <a href="../rewrite/rewritemap.html">Utiliser RewriteMap</a> pour
898       plus de détails.</p>
899
900       <p>Les combinaisons suivantes pour <em>type de correspondance</em>
901       et <em>MapSource</em>
902       peuvent être utilisées :</p>
903
904 <dl>
905     <dt>txt</dt>
906         <dd>Un fichier texte contenant des paires clé-valeur séparées
907         par des espaces, une paire par ligne (<a href="../rewrite/rewritemap.html#txt">Détails ...</a>).</dd>
908
909     <dt>rnd</dt>
910         <dd>Sélection aléatoire d'une entrée depuis un fichier texte (<a href="../rewrite/rewritemap.html#rnd">Détails ...</a>).</dd>
911
912     <dt>dbm</dt>
913         <dd>Recherche une entrée dans un fichier dbm contenant des
914         paires nom-valeur. Le condensé hash est élaboré à partir d'un
915         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>
916
917     <dt>int</dt>
918         <dd>Une des quatre fonctions internes disponibles que fournit
919         <code>RewriteMap</code>: toupper, tolower, escape ou unescape
920         (<a href="../rewrite/rewritemap.html#int">Détails ...</a>).</dd>
921
922     <dt>prg</dt>
923         <dd>Appelle un programme externe ou un script pour effectuer la
924         réécriture (<a href="../rewrite/rewritemap.html#prg">Détails
925         ...</a>).</dd>
926
927     <dt>dbd or fastdbd</dt>
928         <dd>Une commande SQL SELECT à exécuter pour rechercher la cible
929         de réécriture (<a href="../rewrite/rewritemap.html#dbd">Détails
930         ...</a>).</dd>
931     </dl>
932
933 <p>Vous trouverez plus de détails et de nombreux exemples dans le <a href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
934
935
936 </div>
937 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
938 <div class="directive-section"><h2><a name="rewriteoptions" id="rewriteoptions">Directive</a> <a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a><a title="Lien permanent" href="#rewriteoptions" class="permalink">&para;</a></h2>
939 <table class="directive">
940 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options spéciales
941 pour le moteur de réécriture</td></tr>
942 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
943 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
944 <tr><th><a href="directive-dict.html#Override">Surcharges autorisées:</a></th><td>FileInfo</td></tr>
945 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
946 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
947 </table>
948
949       <p>La directive <code class="directive">RewriteOptions</code> définit
950       certaines options spéciales pour la configuration au niveau du
951       serveur ou du répertoire. La chaîne de caractères <em>Option</em>
952       ne peut actuellement prendre qu'une des valeurs suivantes :</p>
953
954       <dl>
955       <dt><code>Inherit</code></dt>
956       <dd>
957
958       <p>Ceci force la configuration locale à hériter de la
959       configuration du niveau supérieur. Dans le contexte des hôtes
960       virtuels, cela signifie que les correspondances, conditions et
961       règles du serveur principal sont héritées. Dans le contexte des
962       répertoires, cela signifie que les conditions et règles de la
963       configuration <code>.htaccess</code> ou les sections <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> du répertoire
964       parent sont héritées. Les règles héritées sont virtuellement
965       copiées dans la section où cette directive est utilisée. Si elles
966       sont utilisées avec des règles locales, les règles héritées sont
967       placées après ces dernières. La place de cette directive - avant
968       ou après les règles locales - n'a aucune influence sur ce
969       comportement. Si des règles locales ont forcé l'arrêt de la
970       réécriture, les règles héritées ne seront pas traitées.</p>
971
972       <div class="warning">
973       Les règles héritées du niveau parent sont appliquées
974       <strong>after</strong> après les règles spécifiées dans le niveau
975       enfant.
976       </div>
977       </dd>
978
979       <dt><code>InheritBefore</code></dt>
980       <dd>
981       <p>Même effet que l'option <code>Inherit</code> ci-dessus, mais
982       les règles spécifiées dans le niveau parent s'appliquent
983       <strong>avant</strong> les règles spécifiées dans le niveau
984       enfant.<br />
985       Disponible depuis la version 2.3.10 du serveur HTTP Apache.</p>
986       </dd>
987
988       <dt><code>InheritDown</code></dt>
989       <dd>
990
991       <p>Si cette option est activée, toutes les configurations enfants
992       hériteront de la configuration courante. Il en est de même si l'on
993       spécifie <code>RewriteOptions Inherit</code> dans toutes les
994       configurations enfants. Voir l'option <code>Inherit</code> pour
995       plus de détails à propos de la manière dont les relations
996       parent-enfants sont traitées.<br />
997       Cette option est disponible à partir
998       de la version 2.4.8 du serveur HTTP Apache.</p>
999       </dd>
1000
1001       <dt><code>InheritDownBefore</code></dt>
1002       <dd>
1003
1004       <p>L'effet de cette option est équivalent à celui de l'option
1005       <code>InheritDown</code> ci-dessus, mais les règles de la
1006       configuration parente s'appliquent <strong>avant</strong> toute
1007       règle de la configuration enfant.<br />
1008       Cette option est disponible à partir
1009       de la version 2.4.8 du serveur HTTP Apache.</p>
1010       </dd>
1011
1012       <dt><code>IgnoreInherit</code></dt>
1013       <dd>
1014
1015       <p>Si cette option est activée, les configurations courante et
1016       enfants ignoreront toute règle héritée d'une configuration parente
1017       via les options <code>InheritDown</code> ou
1018       <code>InheritDownBefore</code>.<br />
1019       Cette option est disponible à partir
1020       de la version 2.4.8 du serveur HTTP Apache.</p>
1021       </dd>
1022       
1023       <dt><code>AllowNoSlash</code></dt>
1024       <dd>
1025       <p>Par défaut, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ignore les URLs qui
1026       correspondent à un répertoire sur disque, mais ne comportent pas
1027       de slash final, afin que le module <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>
1028       redirige le client vers l'URL canonique avec un slash final.</p>
1029       
1030       <p>Lorsque la directive <code class="directive"><a href="../mod/mod_dir.html#directoryslash">DirectorySlash</a></code> est définie à off, il
1031       est possible de spécifier l'option <code>AllowNoSlash</code> pour
1032       s'assurer que les règles de réécriture ne soient plus ignorées.
1033       Si on le souhaite, cette option permet de faire s'appliquer des
1034       règles de réécriture qui correspondent à un répertoire sans slash
1035       final au sein de fichiers .htaccess.<br />
1036       Elle est disponible à
1037       partir de la version 2.4.0 du serveur HTTP Apache.</p>
1038       </dd>
1039
1040       <dt><code>AllowAnyURI</code></dt>
1041       <dd>
1042
1043       <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
1044       contexte de <code>serveur virtuel</code> ou de serveur principal,
1045       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ne traitera les règles de réécriture
1046       que si l'URI de la requête respecte la syntaxe d'un <a href="directive-dict.html#Syntax">chemin URL</a>. Ceci permet
1047       d'éviter certains problèmes de sécurité où des règles
1048       particulières pourraient permettre  des développements de modèles
1049       inattendus (voir <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3368">CVE-2011-3368</a>
1050       et <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4317">CVE-2011-4317</a>).
1051       Pour s'affranchir de la restriction relative à la syntaxe des chemins URL, on peut
1052       utiliser l'option <code>AllowAnyURI</code>, afin de permettre à
1053       <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> d'appliquer le jeu de règles à toute
1054       chaîne de requête URI, sans vérifier si cette dernière respecte la
1055       grammaire des chemins URL définie dans la spécification HTTP.<br />
1056       Disponible depuis la version 2.4.3 du serveur HTTP Apache.</p>
1057
1058       <div class="warning">
1059       <h3>Avertissement à propos de la sécurité</h3> 
1060
1061       <p>L'utilisation de cette option rendra le serveur vulnérable à
1062       certains problèmes de sécurité si les règles de réécritures
1063       concernées n'ont pas été rédigées avec soin. Il est par conséquent
1064       <strong>fortement recommandé</strong> de ne pas utiliser cette
1065       option. En particulier, prêtez attention aux chaînes en entrée contenant le
1066       caractère '<code>@</code>', qui peuvent modifier l'interprétation
1067       de l'URI réécrite, comme indiqué dans les liens ci-dessus.</p>
1068       </div>
1069       </dd>
1070
1071       <dt><code>MergeBase</code></dt>
1072       <dd>
1073
1074       <p>Avec cette option, la valeur de la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code> est recopiée depuis
1075       une valeur explicitement définie dans tout sous-répertoire qui ne
1076       définit pas sa propre directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code>. Il s'agissait du
1077       comportement par défaut avec les versions 2.4.0 à 2.4.3, et ce
1078       drapeau qui permet de retrouver ce comportement est disponible
1079       depuis la version 2.4.4 du serveur HTTP Apache.</p>
1080       </dd>
1081
1082       <dt><code>IgnoreContextInfo</code></dt>
1083       <dd>
1084
1085       <p>Lors d'une
1086       substitution relative dans un contexte de répertoire (htaccess),
1087       et si la directive <code class="directive"><a href="#rewritebase">RewriteBase</a></code> n'a pas été définie,
1088       ce module utilise des informations en provenance d'une extension
1089       d'URL et du contexte du système de fichiers pour transformer la
1090       sustitution relative en URL. Par exemple, les modules
1091       <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>
1092       utilisent ces informations de contexte étendu. Disponible à partir de la
1093       version 2.4.16 du serveur HTTP Apache.</p>
1094       </dd>
1095
1096       <dt><code>LegacyPrefixDocRoot</code></dt>
1097       <dd>
1098
1099       <p>Avant la version 2.4.26, si une substitution était une URL absolue qui
1100       correspondait au serveur virtuel courant, l'URL pouvait être tout d'abord
1101       réduite à sa partie chemin, puis enfin en chemin local. Comme l'URL peut
1102       être réduite en chemin local, le chemin doit être préfixé par la
1103       valeur de la directive DocumentRoot, ce qui permet d'interdire l'accès à
1104       un fichier tel que /tmp/myfile suite à une requête pour
1105       http://host/file/myfile avec la <code class="directive"><a href="#rewriterule">RewriteRule</a></code> suivante :</p>
1106       <pre class="prettyprint lang-config">RewriteRule /file/(.*) http://localhost/tmp/$1</pre>
1107
1108       <p>Cette option permet de restaurer l'ancien comportement lorsqu'un chemin
1109       local obtenu à partir de la réduction d'une URL n'est pas préfixé par la
1110       valeur de la directive DocumentRoot. Disponible à partir de la version
1111       2.4.26 du serveur HTTP Apache.</p>
1112       </dd>
1113
1114       <dt><code>LongURLOptimization</code></dt>
1115       <dd>
1116       <p>Cette option permet de réduire la consommation de mémoire des jeux de
1117       règles longs et non optimisés qui enregistrent de manière répétitive de
1118       longues valeurs dans des variables au sein des directives RewriteCond et
1119       RewriteRule. Disponible à partir de la version 2.5 du serveur HTTP Apache.</p>
1120       </dd>
1121
1122       </dl>
1123
1124 </div>
1125 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1126 <div class="directive-section"><h2><a name="rewriterule" id="rewriterule">Directive</a> <a name="RewriteRule" id="RewriteRule">RewriteRule</a><a title="Lien permanent" href="#rewriterule" class="permalink">&para;</a></h2>
1127 <table class="directive">
1128 <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>
1129 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
1130       <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
1131 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
1132 <tr><th><a href="directive-dict.html#Override">Surcharges autorisées:</a></th><td>FileInfo</td></tr>
1133 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
1134 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
1135 </table>
1136       <p>La directive <code class="directive">RewriteRule</code> est le
1137       véritable cheval de trait de la réécriture. La directive peut
1138       apparaître plusieurs fois, chaque instance définissant une
1139       règle de réécriture particulière. L'ordre dans lequel ces règles
1140       sont définies est important - il s'agit de l'ordre dans lequel
1141       les règles seront appliquées au cours du processus de
1142       réécriture.</p>
1143
1144       <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
1145       <a id="regexp" name="regexp">expression rationnelle</a>
1146       compatible perl. Ce avec quoi ce modèle est comparé dépend de l'endroit où
1147       la directive <code class="directive">RewriteRule</code> est définie.</p>
1148
1149 <div class="note"><h3><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est comparé ?</a></h3>
1150
1151 <ul>
1152       <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
1153       d'abord comparé à la portion de l'URL située entre le nom d'hôte
1154       éventuellement accompagné du port, et la chaîne de paramètres (par
1155       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>
1156
1157       <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
1158       <em>Modèle</em> est comparé avec une partie de chemin ; par exemple une
1159       requête pour "/app1/index.html" entraînera une comparaison avec
1160       "app1/index.html" ou "index.html" selon l'endroit où la directive
1161       <code class="directive">RewriteRule</code> est définie.</p>
1162
1163       <p>Le chemin où la règle est défini est supprimé du chemin correspondant
1164       du système de fichiers avant comparaison (jusqu'au slash final compris).
1165       En conséquence de cette suppression, les règles définies dans
1166       ce contexte n'effectuent des comparaisons qu'avec la portion du chemin
1167       du système de fichiers "en dessous" de l'endroit où la règle est définie.</p>
1168
1169       <p>Le chemin correspondant actuel du système de fichiers est déterminé par
1170       des directives telles que <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> et
1171       <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, ou même le résultat de
1172       substitutions dans des règles <code class="directive">RewriteRule</code> précédentes.  
1173       </p>
1174       </li>
1175
1176       <li><p>Si vous souhaitez faire une comparaison sur le nom
1177       d'hôte, le port, ou la chaîne de requête, utilisez une
1178       directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
1179       comportant respectivement les variables
1180       <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
1181       <code>%{QUERY_STRING}</code>.</p></li>
1182 </ul>
1183       
1184 </div>
1185
1186 <div class="note"><h3>Réécritures dans un contexte de répertoire</h3>
1187 <ul>
1188 <li>L'utilisation du moteur de réécriture dans les
1189 fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections
1190 <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> est un peu plus
1191 complexe.</li>
1192
1193 <li>Pour activer le moteur de réécriture dans ces contextes, vous devez
1194 définir "<code>RewriteEngine On</code>" <strong>et</strong>
1195 "<code>Options FollowSymLinks</code>". Si l'administrateur a désactivé
1196 la possibilité de modifier l'option <code>FollowSymLinks</code> au
1197 niveau du répertoire d'un utilisateur, vous ne pouvez pas utiliser le
1198 moteur de réécriture. Cette restriction a été instaurée à des fins de
1199 sécurité.</li>
1200
1201 <li>Voir la directive
1202 <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de détails à
1203 propos de l'ajout du préfixe après les substitutions relatives.</li>
1204
1205 <li>Si vous souhaitez effectuer une comparaison en prenant en compte
1206 l'intégralité du
1207 chemin de l'URL dans un contexte de répertoire (htaccess), vous devez
1208 utiliser la variable <code>%{REQUEST_URI}</code> dans la directive
1209 <code class="directive"><a href="#rewritecond">RewriteCond</a></code>.</li>
1210
1211 <li>Le prefixe supprimé se termine toujours par un slash, ce qui
1212 signifie que la comparaison s'effectue avec une chaîne qui ne comporte
1213 <em>jamais</em> de slash de début. Ainsi, un <em>modèle</em> contenant
1214 <code>^/</code> ne correspondra jamais dans un contexte de répertoire.</li>
1215
1216 <li>Bien que les règles de réécriture soient permises du point de vue de
1217 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
1218 d'expression rationnelle), elles n'y sont pas prises en compte, et
1219 n'y sont à priori d'aucune utilité. Les substitutions
1220 relatives sont une fonctionnalité qui n'est, elle non-plus pas supportée
1221 dans ce genre de contexte.</li>
1222 </ul>
1223 </div>
1224
1225         <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
1226         document <a href="../rewrite/intro.html#regex">Introduction à
1227         mod_rewrite</a>.</p>
1228
1229       <p>Dans <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, on peut aussi utiliser le caractère
1230       NOT ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
1231       d'inverser la signification d'un modèle, soit pour dire
1232       ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
1233       ce modèle</em>''. Le caractère NON peut donc être utilisé à
1234       titre exceptionnel, lorsqu'il est plus simple d'effectuer une
1235       comparaison avec le modèle inversé, ou dans la dernière règle
1236       par défaut.</p>
1237
1238 <div class="note"><h3>Note</h3>
1239 Si vous utilisez le caractère NON pour inverser la signification d'un
1240 modèle, vous ne pouvez pas inclure de parties génériques groupées dans
1241 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
1242 pas (autrement dit, sa négation correspond), les groupes sont vides.
1243 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
1244 pas vous référer aux groupes par <code>$N</code> dans la chaîne de
1245 substitution !
1246 </div>
1247
1248       <p>Dans une règle de réécriture,
1249       <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
1250       de caractères qui remplace le chemin de l'URL original qui
1251       correspondait au <em>Modèle</em>. <em>Substitution</em> peut
1252       être :</p>
1253
1254       <dl>
1255
1256         <dt>un chemin du système de fichiers</dt>
1257
1258         <dd>Il indique alors la localisation dans le système de
1259         fichiers de la ressource qui doit être envoyée au
1260         client. Les substitutions ne sont traitées en tant que chemins du
1261         système de fichiers que si la règle est configurée dans un
1262         contexte de serveur (serveur virtuel), et si le premier
1263         composant du chemin dans la substitution existe dans le système
1264         de fichiers.</dd>
1265
1266         <dt>chemin d'URL</dt>
1267
1268         <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
1269         doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1270         essaie de deviner si vous avez spécifié un chemin du système
1271         de fichiers ou un chemin d'URL en vérifiant si la première
1272         partie du chemin existe à la racine du système de fichiers.
1273         Par exemple, si vous avez spécifié comme chaîne de
1274         <em>Substitution</em> <code>/www/file.html</code>, cette
1275         dernière sera traitée comme un chemin d'URL <em>à moins</em>
1276         qu'un répertoire nommé <code>www</code> n'existe à la racine
1277         de votre système de fichiers (ou dans le cas d'une
1278         réécriture au sein d'un fichier <code>.htaccess</code>,
1279         relativement à la racine des documents), auquel cas la chaîne de
1280         substitution sera traitée comme un chemin du système de
1281         fichiers. Si vous désirez que d'autres directives de
1282         correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au
1283         chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
1284         comme décrit ci-dessous.</dd>
1285
1286         <dt>URL absolue</dt>
1287
1288         <dd>Si une URL absolue est spécifiée,
1289         <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte
1290         correspond à celui de l'hôte local. Si c'est le cas, le
1291         protocole et le nom d'hôte sont supprimés, et ce qui reste est
1292         traité comme un chemin d'URL. Dans le cas contraire, une
1293         redirection externe vers l'URL indiquée est effectuée. Pour
1294         forcer une redirection externe vers l'hôte local, voir le
1295         drapeau <code>[R]</code> ci-dessous.</dd>
1296
1297         <dt><code>-</code> (tiret)</dt>
1298
1299         <dd>Un tiret indique qu'aucune substitution ne doit être
1300         effectuée (le chemin considéré est transmis sans changement).
1301         Ceci est utile quand un drapeau doit être appliqué sans
1302         modifier le chemin (voir ci-dessous).</dd>
1303
1304       </dl>
1305
1306       <p>En plus du texte, la chaîne <em>Substitution</em> peut
1307       comporter :</p>
1308
1309       <ol>
1310         <li>des références arrières (<code>$N</code>) vers le modèle
1311         d'une directive RewriteRule</li>
1312
1313         <li>des références arrières (<code>%N</code>) vers le dernier
1314         modèle d'une directive RewriteCond qui correspondait</li>
1315
1316         <li>des variables du serveur comme dans les chaînes de test de
1317         condition d'une règle (<code>%{VARNAME}</code>)</li>
1318
1319         <li>des appels de
1320         <a href="#mapfunc">fonctions de comparaison</a>
1321         (<code>${nom correspondance:clé|défaut}</code>)</li>
1322       </ol>
1323
1324       <p>Les références arrières sont des identificateurs de la forme
1325       <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
1326       seront remplacés par le contenu du <strong>N</strong>ème groupe
1327       du <em>Modèle</em> qui correspondait. Les variables du serveur
1328       sont les mêmes que dans la <em>Chaîne_de_test</em> d'une
1329       directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code>. Les
1330       fonctions de comparaison sont issues de la directive <code class="directive"><a href="#rewritemap">RewriteMap</a></code> dans la
1331       section de laquelle elles sont décrites. Ces trois types de
1332       variables sont évaluées dans l'ordre ci-dessus.</p>
1333
1334        <p>Chaque règle de réécriture s'applique au résultat de la règle
1335        précédente, selon l'ordre dans lequel elles ont été définies dans
1336        le fichier de configuration. Le chemin de l'URL ou du système de fichier (voir
1337        ci-dessus <a href="#what_is_matched">Qu'est-ce qui est
1338        comparé ?</a>) est <strong>intégralement
1339       remplacée</strong> par la chaîne de <em>Substitution</em> et le
1340       processus de réécriture se poursuit jusqu'à ce que toutes les
1341       règles aient été appliquées, ou qu'il soit explicitement stoppé
1342       par un drapeau <a href="../rewrite/flags.html#flag_l"><code><strong>L</strong></code></a>,
1343       ou par un autre drapeau qui implique un arrêt immédiat, comme
1344       <code><strong>END</strong></code> ou
1345       <code><strong>F</strong></code>.</p>
1346
1347      <div class="note"><h3>Modifier la chaîne de requête</h3>
1348       <p>Par défaut, la chaîne de requête est transmise sans
1349       modification. Vous pouvez cependant créer dans la chaîne de
1350       substitution des URLs dont une partie constitue une chaîne de
1351       requête. Pour cela, ajoutez simplement un point d'interrogation
1352       dans la chaîne de substitution pour indiquer que le texte qui
1353       suit doit être réinjecté dans la chaîne de requête. Pour
1354       supprimer une chaîne de requête, terminez simplement la chaîne de
1355       substitution par un point d'interrogation. Pour combiner les
1356       nouvelles chaînes de requête avec les anciennes, utilisez le
1357       drapeau <code>[QSA]</code>.</p>
1358      </div>
1359
1360
1361       <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
1362       des
1363       <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
1364       comme troisième argument de la directive
1365       <code class="directive">RewriteRule</code>. Séparés par des virgules au sein d'une
1366       liste encadrée par des crochets, les <em>drapeaux</em> peuvent
1367       être choisis dans la table suivante. Vous trouverez plus de
1368       détails, et des exemples pour chaque drapeau dans le <a href="../rewrite/flags.html">document à propos des drapeaux de
1369       réécriture.</a></p>
1370
1371       <table class="bordered"><tr class="header"><th>Drapeaux et syntaxe</th>
1372         <th>Fonction</th>
1373     </tr>
1374 <tr>
1375         <td>B</td>
1376         <td>Echappe les caractères non-alphanumériques
1377         dans les références arrières <em>avant</em>
1378         d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td>
1379     </tr>
1380 <tr class="odd">
1381         <td>backrefnoplus|BNP</td>
1382         <td>Avec ce drapeau, si les références arrières sont échappées,
1383         les espaces seront échappés en %20 au lieu de +. Ceci s'avère
1384         utile lorsqu'une référence arrière est utilisée dans la partie
1385         chemin, et non dans la chaîne de paramètres de la requête ;
1386         pour plus de détails, voir <em><a href="../rewrite/flags.html#flag_bnp">ici.</a></em></td>
1387     </tr>
1388 <tr>        
1389         <td>chain|C</td>
1390         <td>La règle est chaînée avec la règle suivante. Si la règle
1391         échoue, la ou les règles avec lesquelles elle est est chaînée
1392         seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td>
1393     </tr>
1394 <tr class="odd">
1395         <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
1396         <td>Définit un cookie au niveau du navigateur client. La syntaxe
1397         complète est :
1398         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>
1399         <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em>
1400         </td>
1401     </tr>
1402 <tr>
1403         <td>discardpath|DPI</td>
1404         <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails
1405         ...</a></em></td>
1406     </tr>
1407 <tr class="odd">
1408         <td>END</td>
1409         <td>Stoppe le processus de réécriture immédiatement et
1410         n'applique plus aucune règle. Empêche aussi l'application
1411         ultérieure de règles de réécriture dans les contextes de
1412         répertoire et de fichier .htaccess (disponible à partir de la
1413         version 2.3.9 du serveur HTTP Apache). <em><a href="../rewrite/flags.html#flag_end">détails ...</a></em></td>
1414     </tr>
1415 <tr>    
1416         <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
1417         <td>Définit la variable d'environnement <em>VAR</em> (à la valeur
1418         <em>VAL</em> si elle est fournie). La variante !<em>VAR</em>
1419         annule la définition de la variable <em>VAR</em>.<em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td>
1420     </tr>
1421 <tr class="odd">
1422         <td>forbidden|F</td>
1423         <td>Renvoie une réponse 403 FORBIDDEN au navigateur client.
1424         <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td>
1425     </tr>
1426 <tr>
1427         <td>gone|G</td>
1428         <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td>
1429     </tr>
1430 <tr class="odd">
1431         <td>Handler|H=<em>Gestionnaire de contenu</em></td>
1432         <td>L'URI résultant est envoyé au <em>Gestionnaire de
1433         contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td>
1434     </tr>
1435 <tr>
1436         <td>last|L</td>
1437         <td>Arrête le processus de réécriture immédiatement et n'applique
1438         plus aucune règle. Prêtez une attention particulière aux mises
1439         en garde concernant les contextes de niveau répertoire et
1440         .htaccess (voir aussi le drapeau END). <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
1441     </tr>
1442 <tr class="odd">
1443         <td>next|N</td>
1444         <td>Réexécute le processus de réécriture à partir de la première
1445         règle, en utilisant le résultat du jeu de règles, sous réserve
1446         qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails
1447         ...</a></em></td>
1448     </tr>
1449 <tr>
1450         <td>nocase|NC</td>
1451         <td>Rend la comparaison entre modèles insensible à la casse.
1452         <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td>
1453     </tr>
1454 <tr class="odd">
1455         <td>noescape|NE</td>
1456         <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal
1457         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>
1458     </tr>
1459 <tr>
1460         <td>nosubreq|NS</td>
1461         <td>La règle est sautée si la requête courante est une
1462         sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td>
1463     </tr>
1464 <tr class="odd">
1465         <td>proxy|P</td>
1466         <td>Force l'envoi en interne de l'URL de substitution en tant
1467         que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails
1468         ...</a></em></td>
1469     </tr>
1470 <tr>
1471         <td>passthrough|PT</td>
1472         <td>L'URI résultant est repassé au moteur de mise en
1473         correspondance des URLs pour y être traité par d'autres
1474         traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
1475         <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td>
1476     </tr>
1477 <tr class="odd">
1478         <td>qsappend|QSA</td>
1479         <td>Ajoute toute chaîne de paramètres présente dans l'URL de la
1480         requête originale à toute chaîne de paramètres créée dans la
1481         cible de réécriture. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td>
1482     </tr>
1483 <tr>
1484         <td>qsdiscard|QSD</td>
1485         <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails
1486         ...</a></em></td>
1487     </tr>
1488 <tr class="odd">
1489         <td>qslast|QSL</td>
1490         <td>Interprète le dernier (le plus à droite) point d'interrogation comme
1491         le délimiteur de la chaîne de paramètres de la requête, au lieu du
1492         premier (le plus à gauche) comme c'est le cas habituellement. Disponble
1493         à partir de la version 2.4.19 du serveur HTTP Apache. <em><a href="../rewrite/flags.html#flag_qsl">détails ...</a></em></td>
1494     </tr>
1495 <tr>
1496         <td>redirect|R[=<em>code</em>]</td>
1497         <td>Force une redirection externe, avec un code de statut HTTP
1498         optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em>
1499         </td>
1500     </tr>
1501 <tr class="odd">
1502         <td>skip|S=<em>nombre</em></td>
1503         <td>Si la règle courante s'applique, le moteur de réécriture
1504         doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td>
1505     </tr>
1506 <tr>
1507         <td>type|T=<em>MIME-type</em></td>
1508         <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
1509         spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td>
1510     </tr>
1511 </table>
1512
1513 <div class="note"><h3>Développement du répertoire home</h3>
1514 <p> Quand la chaîne de substitution commence par quelque chose comme
1515 "/~user" (de manière explicite ou par références arrières), <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1516 développe le répertoire home sans tenir compte de la présence ou de la
1517 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
1518
1519 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est
1520 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
1521 </div>
1522
1523      <p>Voici toutes les combinaisons de substitution et leurs
1524      significations :</p>
1525
1526       <p><strong>Dans la configuration au niveau du serveur principal
1527       (<code>httpd.conf</code>)<br />
1528        pour la requête ``<code>GET
1529       /chemin/infochemin</code>'':</strong><br />
1530       </p>
1531
1532 <table class="bordered"><tr class="header">
1533 <th>Règle</th>
1534 <th>Résultat de la substitution</th>
1535 </tr>
1536 <tr>
1537 <td>^/un_chemin(.*) autre_chemin$1</td>
1538 <td>invalide, non supporté</td>
1539 </tr>
1540 <tr class="odd">
1541 <td>^/un_chemin(.*) autre_chemin$1  [R]</td>
1542 <td>invalide, non supporté</td>
1543 </tr>
1544 <tr>
1545 <td>^/un_chemin(.*) autre_chemin$1  [P]</td>
1546 <td>invalide, non supporté</td>
1547 </tr>
1548 <tr class="odd">
1549 <td>^/un_chemin(.*) /autre_chemin$1</td>
1550 <td>/autre_chemin/info_chemin</td>
1551 </tr>
1552 <tr>
1553 <td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
1554 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1555 </tr>
1556 <tr class="odd">
1557 <td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
1558 <td>sans objet, non supporté</td>
1559 </tr>
1560 <tr>
1561 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
1562 <td>/autre_chemin/info_chemin</td>
1563 </tr>
1564 <tr class="odd">
1565 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
1566 <td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
1567 </tr>
1568 <tr>
1569 <td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
1570 <td>sans objet, non supporté</td>
1571 </tr>
1572 <tr class="odd">
1573 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
1574 <td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
1575 </tr>
1576 <tr>
1577 <td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
1578 <td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
1579 redondant)</td>
1580 </tr>
1581 <tr class="odd">
1582 <td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
1583 <td>http://otherhost/otherpath/pathinfo via internal proxy</td>
1584 </tr>
1585 </table>
1586
1587       <p><strong>Dans une configuration de niveau répertoire pour
1588       <code>/chemin</code><br />
1589        (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
1590       <code>RewriteBase "/chemin"</code>)<br />
1591        pour la requête ``<code>GET
1592       /chemin/chemin-local/infochemin</code>'':</strong><br />
1593      </p>
1594
1595 <table class="bordered"><tr class="header">
1596 <th>Règle</th>
1597 <th>Résultat de la substitution</th>
1598 </tr>
1599 <tr>
1600 <td>^chemin-local(.*) autre-chemin$1</td>
1601 <td>/chemin/autre-chemin/infochemin</td>
1602 </tr>
1603 <tr class="odd">
1604 <td>^chemin-local(.*) autre-chemin$1  [R]</td>
1605 <td>http://cet-hôte/chemin/autre-chemin/infochemin via redirection
1606 externe</td>
1607 </tr>
1608 <tr>
1609 <td>^chemin-local(.*) autre-chemin$1  [P]</td>
1610 <td>n'a pas lieu d'être, non supporté</td>
1611 </tr>
1612 <tr class="odd">
1613 <td>^chemin-local(.*) /autre-chemin$1</td>
1614 <td>/autre-chemin/infochemin</td>
1615 </tr>
1616 <tr>
1617 <td>^chemin-local(.*) /autre-chemin$1 [R]</td>
1618 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1619 </tr>
1620 <tr class="odd">
1621 <td>^chemin-local(.*) /autre-chemin$1 [P]</td>
1622 <td>n'a pas lieu d'être, non supporté</td>
1623 </tr>
1624 <tr>
1625 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1</td>
1626 <td>/autre-chemin/infochemin</td>
1627 </tr>
1628 <tr class="odd">
1629 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R]</td>
1630 <td>http://cet-hôte/autre-chemin/infochemin via redirection externe</td>
1631 </tr>
1632 <tr>
1633 <td>^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P]</td>
1634 <td>n'a pas lieu d'être, non supporté</td>
1635 </tr>
1636 <tr class="odd">
1637 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1</td>
1638 <td>http://autre hôte/autre-chemin/infochemin via redirection externe</td>
1639 </tr>
1640 <tr>
1641 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [R]</td>
1642 <td>http://autre hôte/autre-chemin/infochemin via redirection externe
1643 (le drapeau [R] est redondant)</td>
1644 </tr>
1645 <tr class="odd">
1646 <td>^chemin-local(.*) http://autre hôte/autre-chemin$1 [P]</td>
1647 <td>http://autre hôte/autre-chemin/infochemin via un mandataire interne</td>
1648 </tr>
1649 </table>
1650
1651   
1652 </div>
1653 </div>
1654 <div class="bottomlang">
1655 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
1656 <a href="../fr/mod/mod_rewrite.html" title="Français">&nbsp;fr&nbsp;</a></p>
1657 </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>
1658 <script type="text/javascript"><!--//--><![CDATA[//><!--
1659 var comments_shortname = 'httpd';
1660 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html';
1661 (function(w, d) {
1662     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
1663         d.write('<div id="comments_thread"><\/div>');
1664         var s = d.createElement('script');
1665         s.type = 'text/javascript';
1666         s.async = true;
1667         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
1668         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
1669     }
1670     else {
1671         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
1672     }
1673 })(window, document);
1674 //--><!]]></script></div><div id="footer">
1675 <p class="apache">Copyright 2018 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
1676 <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[//><!--
1677 if (typeof(prettyPrint) !== 'undefined') {
1678     prettyPrint();
1679 }
1680 //--><!]]></script>
1681 </body></html>