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