github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/manual/mod/mod_rewrite.html.fr (about) 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> 4 <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> 5 <!-- 6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7 This file is generated from xml source: DO NOT EDIT 8 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 9 --> 10 <title>mod_rewrite - Serveur Apache HTTP Version 2.2</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" /><link href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html" rel="canonical" /></head> 18 <body> 19 <div id="page-header"> 20 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> 21 <p class="apache">Serveur Apache HTTP Version 2.2</p> 22 <img alt="" src="../images/feather.gif" /></div> 23 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> 24 <div id="path"> 25 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.2</a> > <a href="./">Modules</a></div> 26 <div id="page-content"> 27 <div class="retired"><h4>A savoir</h4> 28 <p>Ce document concerne une version ancienne (<strong>2.2</strong>) 29 du serveur HTTP Apache. La version actuelle est 30 documentée <a href="http://httpd.apache.org/docs/current">ici</a>. Si vous n'avez 31 pas encore effectué la mise è jour, veuillez suivre <a href="http://httpd.apache.org/docs/current/upgrading.html">ce 32 lien</a> pour plus d'informations.</p> 33 <p>Pour consulter la version actuelle de ce 34 document, vous pouvez suivre <a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html">ce lien</a>.</p></div><div id="preamble"><h1>Module Apache mod_rewrite</h1> 35 <div class="toplang"> 36 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> | 37 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p> 38 </div> 39 <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 40 règles permettant de réécrire les URLs des requêtes 41 à la volée</td></tr> 42 <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 43 <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>rewrite_module</td></tr> 44 <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_rewrite.c</td></tr> 45 <tr><th><a href="module-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 1.3 46 d'Apache</td></tr></table> 47 <h3>Sommaire</h3> 48 49 <p>Ce module utilise un moteur de réécriture à base de règles 50 (basé sur un interpréteur d'expressions rationnelles) pour 51 réécrire les URLs des requêtes à la volée. Il accepte un nombre 52 illimité de règles, ainsi q'un nombre illimité de conditions 53 attachées à chaque règle, fournissant ainsi un mécanisme de 54 manipulation d'URL vraiment souple et puissant. Les manipulations 55 d'URL peuvent dépendre de nombreux tests, des variables du 56 serveur, des variables d'environnement, des en-têtes HTTP ou de 57 l'horodatage. On peut même lancer des requêtes vers une base de 58 données externe sous divers formats, afin d'obtenir une 59 sélection d'URL très fine.</p> 60 61 <p>Ce module agit sur l'ensemble de l'URL (la partie concernant 62 le chemin incluse) au niveau du serveur 63 (<code>httpd.conf</code>) mais aussi au niveau du répertoire 64 (<code>.htaccess</code>), et peut générer des parties de chaîne 65 de requête comme résultat. Le résultat de la réécriture peut 66 renvoyer vers un sous-traitement interne, une redirection vers 67 une requête externe, ou même vers le flux d'un proxy interne.</p> 68 69 <p>Vous trouverez d'avantage de détails, discussions et exemples 70 dans la 71 <a href="../rewrite/">documentation détaillée 72 sur mod_rewrite</a>.</p> 73 </div> 74 <div id="quickview"><h3>Sujets</h3> 75 <ul id="topics"> 76 <li><img alt="" src="../images/down.gif" /> <a href="#quoting">Marquage des caractères spéciaux</a></li> 77 <li><img alt="" src="../images/down.gif" /> <a href="#EnvVar">Variables d'environnement</a></li> 78 <li><img alt="" src="../images/down.gif" /> <a href="#vhosts">Réécriture et hôtes virtuels</a></li> 79 <li><img alt="" src="../images/down.gif" /> <a href="#Solutions">Solutions pratiques</a></li> 80 </ul><h3 class="directives">Directives</h3> 81 <ul id="toc"> 82 <li><img alt="" src="../images/down.gif" /> <a href="#rewritebase">RewriteBase</a></li> 83 <li><img alt="" src="../images/down.gif" /> <a href="#rewritecond">RewriteCond</a></li> 84 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteengine">RewriteEngine</a></li> 85 <li><img alt="" src="../images/down.gif" /> <a href="#rewritelock">RewriteLock</a></li> 86 <li><img alt="" src="../images/down.gif" /> <a href="#rewritelog">RewriteLog</a></li> 87 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteloglevel">RewriteLogLevel</a></li> 88 <li><img alt="" src="../images/down.gif" /> <a href="#rewritemap">RewriteMap</a></li> 89 <li><img alt="" src="../images/down.gif" /> <a href="#rewriteoptions">RewriteOptions</a></li> 90 <li><img alt="" src="../images/down.gif" /> <a href="#rewriterule">RewriteRule</a></li> 91 </ul> 92 <h3>Voir aussi</h3> 93 <ul class="seealso"> 94 <li><a href="#rewriteflags">Drapeaux des règles de réécriture</a></li> 95 </ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> 96 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 97 <div class="section"> 98 <h2><a name="quoting" id="quoting">Marquage des caractères spéciaux</a></h2> 99 100 <p>Depuis Apache 1.3.20, les caractères spéciaux dans les 101 <em>chaînes de test</em> et les chaînes de <em>Substitution</em> 102 peuvent être échappés (c'est à dire traités comme des caractères 103 normaux sans tenir compte de leur signification en tant que 104 caractère spécial), en les faisant précéder d'un caractère 105 anti-slash ('\'). En d'autres termes, vous pouvez inclure un 106 véritable signe "dollar" dans une chaîne de <em>Substitution</em> 107 en utilisant '<code>\$</code>' ; ceci empêche mod_rewrite de le 108 traiter comme une référence arrière.</p> 109 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 110 <div class="section"> 111 <h2><a name="EnvVar" id="EnvVar">Variables d'environnement</a></h2> 112 113 <p>Ce module conserve le contenu de deux variables d'environnement 114 CGI/SSI additionnelles (non standards) nommées 115 <code>SCRIPT_URL</code> et <code>SCRIPT_URI</code>. Celles-ci 116 contiennent l'adresse <em>logique</em> vue du Web 117 de la ressource concernée, tandis que les variables CGI/SSI 118 standards <code>SCRIPT_NAME</code> et 119 <code>SCRIPT_FILENAME</code> contiennent l'adresse 120 <em>physique</em> de la ressource vue du système. </p> 121 122 <p>Note : ces variables conservent l'URI/URL <em>telle qu'elle 123 était à l'arrivée de la requête</em>, c'est à dire 124 <em>avant</em> tout processus de réécriture. Il est important de 125 le savoir car le processus de réécriture est principalement 126 utilisé pour réécrire des URLs logiques en chemins physiques.</p> 127 128 <div class="example"><h3>Exemple</h3><pre>SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html 129 SCRIPT_FILENAME=/u/rse/.www/index.html 130 SCRIPT_URL=/u/rse/ 131 SCRIPT_URI=http://en1.engelschall.com/u/rse/</pre></div> 132 133 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 134 <div class="section"> 135 <h2><a name="vhosts" id="vhosts">Réécriture et hôtes virtuels</a></h2> 136 137 <p>Par défaut, les hôtes virtuels n'héritent pas de la 138 configuration de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> telle qu'elle est 139 définie dans le contexte du serveur principal. Pour que la 140 configuration du serveur principal s'applique aux hôtes virtuels, 141 vous devez insérez les directives suivantes dans chaque section 142 <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> :</p> 143 144 <div class="example"><p><code> 145 RewriteEngine On<br /> 146 RewriteOptions Inherit 147 </code></p></div> 148 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 149 <div class="section"> 150 <h2><a name="Solutions" id="Solutions">Solutions pratiques</a></h2> 151 152 <p>Vous trouverez de nombreux exemples d'utilisation courante (et 153 moins courante) de mod_rewrite dans la <a href="../rewrite/">documentation spécifique à la réécriture.</a></p> 154 155 </div> 156 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 157 <div class="directive-section"><h2><a name="rewritebase" id="rewritebase">Directive</a> <a name="RewriteBase" id="RewriteBase">RewriteBase</a></h2> 158 <table class="directive"> 159 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'URL de base pour les réécritures au niveau 160 répertoire</td></tr> 161 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteBase <em>chemin_URL</em></code></td></tr> 162 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>None</code></td></tr> 163 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire, .htaccess</td></tr> 164 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr> 165 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 166 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 167 </table> 168 <p>La directive <code class="directive">RewriteBase</code> permet de 169 spécifier le préfixe d'URL à utiliser dans un contexte de 170 répertoire (htaccess) pour les directives 171 <code class="directive">RewriteRule</code> qui réécrivent vers un chemin 172 relatif.</p> 173 <p>Cette directive est <em>obligatoire</em> si vous utilisez un 174 chemin relatif dans une substitution, et dans un contexte de 175 répertoire (htaccess), sauf si au moins une de ces conditions est 176 vérifiée :</p> 177 <ul> 178 <li>La requête initiale, ainsi que la substitution, sont dans 179 la <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> (c'est à 180 dire que pour y accéder, il n'est pas nécessaire d'utiliser 181 une directive telle qu'<code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>).</li> 182 <li>Le chemin du système de fichiers vers le répertoire 183 contenant la <code class="directive">RewriteRule</code>, suffixé par 184 la substitution relative est aussi valide en tant qu'URL sur 185 le serveur (ce qui est rare).</li> 186 </ul> 187 188 <p>Dans l'exemple ci-dessous, la directive 189 <code class="directive">RewriteBase</code> est nécessaire afin d'éviter une 190 réécriture en http://example.com/opt/myapp-1.2.3/welcome.html car la 191 ressource n'était pas relative à la racine des documents. Cette erreur 192 de configuration aurait conduit le serveur à rechercher un répertoire 193 "opt" à la racine des documents.</p> 194 195 <div class="example"><pre>DocumentRoot /var/www/example.com 196 Alias /myapp /opt/myapp-1.2.3 197 <Directory /opt/myapp-1.2.3> 198 RewriteEngine On 199 RewriteBase /myapp/ 200 RewriteRule ^index\.html$ welcome.html 201 </Directory></pre></div> 202 203 </div> 204 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 205 <div class="directive-section"><h2><a name="rewritecond" id="rewritecond">Directive</a> <a name="RewriteCond" id="RewriteCond">RewriteCond</a></h2> 206 <table class="directive"> 207 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une condition qui devra être satisfaite pour que 208 la réécriture soit effectuée 209 </td></tr> 210 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code> RewriteCond 211 <em>chaîne_de_test</em> <em>expression_de_comparaison</em></code></td></tr> 212 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr> 213 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr> 214 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 215 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 216 </table> 217 <p>La directive <code class="directive">RewriteCond</code> définit une 218 condition d'application d'une certaine règle. Une ou plusieurs 219 directives <code class="directive">RewriteCond</code> peuvent précéder 220 une directive 221 <code class="directive"><a href="#rewriterule">RewriteRule</a></code>. La règle 222 qui suit n'est appliquée que si l'état actuel de l'URI 223 correspond à son modèle, <strong>et</strong> si les conditions sont satisfaites.</p> 224 225 <p><em>chaîne_de_test</em> est une chaîne de caractères qui peut 226 contenir, en plus du plein texte, les constructions étendues 227 suivantes :</p> 228 229 <ul> 230 <li> 231 <strong>références arrières de règle de réécriture</strong> : 232 ce sont des références arrières de la forme 233 <strong><code>$N</code></strong> (0 <= N <= 9), qui 234 donnent accès aux parties groupées (entre parenthèses) du 235 modèle tiré de la <code>RewriteRule</code> assujettie au 236 jeu de conditions concerné. 237 </li> 238 <li> 239 <strong>Références arrières de condition de réécriture 240 </strong> : ce sont des références arrières de la forme 241 <strong><code>%N</code></strong> (1 <= N <= 9), qui 242 donnent accès aux parties groupées (là aussi entre 243 parenthèses) du modèle de la dernière condition satisfaite 244 du jeu de conditions concerné. 245 </li> 246 <li> 247 <strong>extensions de table de réécriture</strong> : 248 ce sont des extensions de la forme <strong><code>${nomTable:clé|défaut}</code></strong>. Voir 249 <a href="#mapfunc">la documentation de 250 RewriteMap</a> pour plus de détails. 251 </li> 252 <li> 253 <strong>Variables du serveur</strong> : 254 ce sont des variables de la forme 255 <strong><code>%{</code> <em>NOM_DE_VARIABLE</em> 256 <code>}</code></strong> 257 <strong><code>%{</code> <em>NOM_DE_VARIABLE</em> 258 <code>}</code></strong> où <em>NOM_DE_VARIABLE</em> 259 peut être une chaîne de caractères faisant partie de la 260 liste suivante : 261 262 <table> 263 264 <tr> 265 <th>En-têtes HTTP :</th> <th>connexion & requête:</th> <th /> 266 </tr> 267 268 <tr> 269 <td> 270 HTTP_USER_AGENT<br /> 271 HTTP_REFERER<br /> 272 HTTP_COOKIE<br /> 273 HTTP_FORWARDED<br /> 274 HTTP_HOST<br /> 275 HTTP_PROXY_CONNECTION<br /> 276 HTTP_ACCEPT<br /> 277 </td> 278 279 <td> 280 REMOTE_ADDR<br /> 281 REMOTE_HOST<br /> 282 REMOTE_PORT<br /> 283 REMOTE_USER<br /> 284 REMOTE_IDENT<br /> 285 REQUEST_METHOD<br /> 286 SCRIPT_FILENAME<br /> 287 PATH_INFO<br /> 288 QUERY_STRING<br /> 289 AUTH_TYPE<br /> 290 </td> 291 292 <td /> 293 </tr> 294 295 <tr> 296 <th>variables internes au serveur :</th> <th>date et heure :</th> <th>spéciaux :</th> 297 </tr> 298 299 <tr> 300 <td> 301 DOCUMENT_ROOT<br /> 302 SERVER_ADMIN<br /> 303 SERVER_NAME<br /> 304 SERVER_ADDR<br /> 305 SERVER_PORT<br /> 306 SERVER_PROTOCOL<br /> 307 SERVER_SOFTWARE<br /> 308 </td> 309 310 <td> 311 TIME_YEAR<br /> 312 TIME_MON<br /> 313 TIME_DAY<br /> 314 TIME_HOUR<br /> 315 TIME_MIN<br /> 316 TIME_SEC<br /> 317 TIME_WDAY<br /> 318 TIME<br /> 319 </td> 320 321 <td> 322 API_VERSION<br /> 323 THE_REQUEST<br /> 324 REQUEST_URI<br /> 325 REQUEST_FILENAME<br /> 326 IS_SUBREQ<br /> 327 HTTPS<br /> 328 </td> 329 </tr> 330 </table> 331 332 <p>Toutes ces variables correspondent nom pour nom aux 333 en-têtes MIME HTTP, aux variables C du serveur Apache 334 ou aux champs <code>struct tm</code> du système Unix. 335 La plupart sont documentées dans une autre partie du 336 manuel ou dans la spécification CGI.</p> 337 338 <p>SERVER_NAME et SERVER_PORT dépendent respectivement 339 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> 340 341 <p>Parmi les variables 342 spécifiques à mod_rewrite, ou trouve les suivantes :</p> 343 <div class="note"> 344 <dl> 345 <dt><code>IS_SUBREQ</code></dt> 346 347 <dd>Contiendra le texte "true" si la requête en cours 348 de traitement est une sous-requête, "false" dans le 349 cas contraire. Une sous-requête est générée quand un 350 module a besoin de se référer à des fichiers ou URIs 351 addidionnels pour pouvoir mener à bien sa tâche.</dd> 352 353 <dt><code>API_VERSION</code></dt> 354 355 <dd>Il s'agit de la version de l'API des modules 356 Apache (l'interface interne entre le serveur et les 357 modules) dans la construction actuelle de httpd, 358 telle qu'elle est définie dans include/ap_mmn.h. La 359 version de l'API des modules correspond à la version 360 d'Apache utilisée (pour Apache 1.3.14, par exemple, 361 la version de l'API sera 19990320:10), mais cette 362 information intéresse principalement les 363 développeurs de modules.</dd> 364 365 <dt><code>THE_REQUEST</code></dt> 366 367 <dd>La ligne de requête HTTP complète envoyée par le 368 navigateur au serveur (par exemple, "<code>GET 369 /index.html HTTP/1.1</code>"), à l'exclusion de tout 370 en-tête ajouté par le navigateur. Cette 371 valeur n'a pas été déséchappée (décodée), à la 372 différence de la plupart des variables suivantes.</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". En particulier, ceci exclut la chaîne 378 de paramètres qui est quant à elle disponible via sa 379 propre variable <code>QUERY_STRING</code>.</dd> 380 381 <dt><code>REQUEST_FILENAME</code></dt> 382 383 <dd>Le chemin complet local au système de fichiers 384 du fichier ou du script correspondant 385 à la requête, s'il a déjà été déterminé par le serveur 386 au moment où on y fait référence. Dans le cas 387 contraire, et en particulier dans le cas d'un serveur 388 virtuel, <code>REQUEST_FILENAME</code> contient la 389 valeur de <code>REQUEST_URI</code>.</dd> 390 391 <dt><code>HTTPS</code></dt> 392 393 <dd>Contiendra le texte "on" si la connexion 394 utilise SSL/TLS, "off" dans le cas contraire 395 (L'utilisation de cette variable est pertinente, 396 indépendamment du fait que <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> 397 soit chargé ou non).</dd> 398 399 </dl> 400 </div> 401 </li> 402 </ul> 403 404 <p>Autres points à connaître :</p> 405 406 <ol> 407 <li><p>Les variables SCRIPT_FILENAME et REQUEST_FILENAME ont la 408 même valeur - celle du champ <code>filename</code> de la 409 structure interne du serveur Apache <code>request_rec</code>. 410 Le premier nom est bien connu en tant que variable CGI, 411 alors que le second est équivalent à REQUEST_URI (qui contient 412 la valeur du champ <code>uri</code> de la structure 413 <code>request_rec</code>).</p> 414 <p>Si une substitution survient, et si la réécriture se 415 poursuit, la valeur des deux variables est mise à jour en 416 conséquence.</p> 417 <p>Dans un contexte de serveur principal (c'est à dire avant que 418 la requête n'ait été mise en relation avec le système de 419 fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas 420 contenir le chemin local entier dans le système de fichiers, car 421 celui-ci n'a pas encore été déterminé à ce stade du traitement. 422 Les deux variables contiennent alors la valeur de REQUEST_URI. 423 Pour obtenir le chemin local entier associé à la requête dans le 424 système de fichiers 425 dans un contexte de serveur principal, utilisez une recherche 426 avant <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la 427 valeur finale de REQUEST_FILENAME.</p></li> 428 429 430 <li>On peut aussi utiliser <code>%{ENV:variable}</code>, où 431 <em>variable</em> peut être remplacé par toute variable 432 d'environnement. Ces variables sont recherchées dans les 433 structures internes d'Apache, et (si elles n'y figurent pas) 434 via <code>getenv()</code> depuis le processus du serveur 435 Apache.</li> 436 437 <li>Que <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> soit chargé ou non, on peut 438 utiliser <code>%{SSL:variable}</code>, où <em>variable</em> 439 peut être remplacé par le nom d'une 440 <a href="mod_ssl.html#envvars">variable 441 d'environnement SSL</a>, mais la valeur produite sera toujours 442 une chaîne de caractères vide si <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> n'est 443 pas chargé. Exemple : 444 <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> peut correspondre 445 à <code>128</code>. Ces variables sont 446 disponibles même si l'option <code>StdEnvVars</code> de la 447 directive <code class="directive"><a href="../mod/mod_ssl.html#ssloptions">SSLOptions</a></code> n'a 448 pas été définie.</li> 449 450 <li>Pour obtenir la valeur d'un en-tête contenu dans une requête 451 HTTP, on peut toujours utiliser <code>%{HTTP:header}</code>, 452 où <em>header</em> peut être remplacé par tout nom d'en-tête 453 MIME HTTP. Exemple : <code>%{HTTP:Proxy-Connection}</code> est 454 la valeur de l'en-tête HTTP ``<code>Proxy-Connection:</code>''. 455 <p>Si une condition contient un en-tête HTTP, il est ajouté à 456 l'en-tête Vary de la réponse dans le cas où la condition est 457 évaluée à true pour la requête. Dans le cas contraire, il n'est 458 <strong>pas</strong> ajouté. L'ajout de l'en-tête HTTP à 459 l'en-tête Vary de la réponse s'avère nécessaire pour une mise 460 en cache correcte.</p> 461 <p>Il faut garder à l'esprit que les conditions suivent une 462 logique de court-circuit en cas de présence du drapeau 463 '<strong><code>ornext|OR</code></strong>', si bien que 464 certaines d'entre elles sont susceptibles de ne pas être 465 évaluées du tout.</p></li> 466 467 <li>On peut utiliser <code>%{LA-U:variable}</code> pour les 468 recherches en avant qui effectuent une sous-requête interne 469 (basée sur l'URL), pour déterminer la valeur finale de 470 <em>variable</em>. Cela peut servir à accéder à une variable 471 (nécessaire pour une réécriture) qui n'est pas disponible dans 472 la situation présente, mais le sera dans une phase ultérieure. 473 <p>Par exemple, pour effectuer une réécriture qui tient compte 474 de la variable <code>REMOTE_USER</code> dans un contexte 475 niveau serveur (fichier <code>httpd.conf</code>), vous devez 476 utiliser <code>%{LA-U:REMOTE_USER}</code> ; cette variable est 477 définie au cours des phases d'autorisation, qui interviennent 478 <em>après</em> la phase de traduction de l'URL (pendant 479 laquelle agit mod_rewrite).</p> 480 <p>Par contre, comme mod_rewrite implémente son contexte 481 niveau répertoire (fichier <code>.htaccess</code>) via la 482 phase Fixup de l'API, et comme les phases d'autorisation 483 interviennent <em>avant</em> cette phase, vous ne pouvez 484 utiliser <code>%{REMOTE_USER}</code> que 485 dans le contexte niveau serveur.</p></li> 486 487 <li>On peut utiliser <code>%{LA-F:variable}</code> pour 488 effectuer une sous-requête interne (basée sur un nom de 489 fichier), pour déterminer la valeur finale de 490 <em>variable</em>. La plupart du temps, elle est identique à 491 LA-U vue précédemment.</li> 492 </ol> 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><strong>A savoir :</strong> 501 <em>expression_de_comparaison</em> est une 502 <em>expression rationnelle compatible perl</em> avec 503 quelques extensions :</p> 504 505 <ol> 506 <li>Vous pouvez préfixer l'expression avec un caractère 507 '<code>!</code>' (point d'exclamation) pour indiquer une 508 expression de <strong>non</strong>-correspondance.</li> 509 510 <li>Il existe certaines variantes spéciales 511 d'<em>expressions de comparaison</em>. A la place d'une 512 expression rationnelle, vous pouvez utiliser : 513 514 <ul> 515 <li>'<strong><expression</strong>' (inférieur au sens 516 lexicographique)<br /> 517 Traite l'<em>expression</em> comme une chaîne de 518 caractères et la compare lexicographiquement à 519 <em>chaîne_de_test</em>. La condition est satisfaite si 520 <em>chaîne_de_test</em> est inférieure au sens 521 lexicographique à l'<em>expression</em>.</li> 522 523 <li>'<strong>>expression</strong>' (supérieur au sens 524 lexicographique)<br /> 525 Traite l'<em>expression</em> comme une chaîne de 526 caractères et la compare lexicographiquement à 527 <em>chaîne_de_test</em>. La condition est satisfaite si 528 <em>chaîne_de_test</em> est supérieure au sens 529 lexicographique à l'<em>expression</em>.</li> 530 531 <li>'<strong>=expression</strong>' (égal au sens 532 lexicographique)<br /> 533 Traite l'<em>expression</em> comme une chaîne de 534 caractères et la compare lexicographiquement à 535 <em>chaîne_de_test</em>. La condition est satisfaite si 536 <em>chaîne_de_test</em> est égale au sens 537 lexicographique à l'<em>expression</em> (les deux chaînes 538 sont exactement identiques, caractère pour caractère). Si 539 <em>expression</em> est <code>""</code> (deux guillemets), 540 <em>chaîne_de_test</em> est comparée à la chaîne vide.</li> 541 542 <li>'<strong>-d</strong>' (est un 543 <strong>r</strong>épertoire)<br /> 544 Traite <em>chaîne_de_test</em> comme un chemin et vérifie 545 s'il existe ou pas, et s'il s'agit d'un répertoire.</li> 546 547 <li>'<strong>-f</strong>' (est un 548 <strong>f</strong>ichier régulier)<br /> 549 Traite <em>chaîne_de_test</em> comme un chemin et vérifie 550 s'il existe ou pas, et s'il s'agit d'un fichier régulier.</li> 551 552 <li>'<strong>-s</strong>' (est un fichier régulier d'une 553 certaine <strong>t</strong>aille)<br /> 554 Traite <em>chaîne_de_test</em> comme un chemin et vérifie 555 s'il existe ou pas, et s'il s'agit d'un fichier régulier 556 dont la taille est supérieure à zéro.</li> 557 558 <li>'<strong>-l</strong>' (est un 559 <strong>l</strong>ien symbolique)<br /> 560 Traite <em>chaîne_de_test</em> comme un chemin et vérifie 561 s'il existe ou pas, et s'il s'agit d'un lien 562 symbolique.</li> 563 564 <li>'<strong>-x</strong>' (a le droit 565 d'e<strong>x</strong>écussion)<br /> 566 Traite <em>chaîne_de_test</em> comme un chemin et vérifie 567 s'il existe ou pas, et a le droit d'exécution. Ce droit est 568 déterminé en accord avec le système d'exploitation 569 sous-jacent.</li> 570 571 <li>'<strong>-F</strong>' (test de l'existence d'un fichier 572 via une sous-requête)<br /> 573 Vérifie si <em>chaîne_de_test</em> est un fichier valide, 574 accessible à travers tous les contrôles d'accès du serveur 575 actuellement configurés pour ce chemin. C'est une 576 sous-requête interne qui effectue cette vérification - à 577 utiliser avec précautions car les performances du serveur 578 peuvent s'en trouver affectées !</li> 579 580 <li><p>'<strong>-U</strong>' (test de l'existence d'une URL 581 via une sous-requête)<br /> 582 Vérifie si <em>chaîne_de_test</em> est une URL valide, 583 accessible à travers tous les contrôles d'accès du serveur 584 actuellement configurés pour ce chemin. C'est une 585 sous-requête interne qui effectue cette vérification - à 586 utiliser avec précautions car les performances du serveur 587 peuvent s'en trouver affectées !</p> 588 <p>Ce drapeau ne renvoie <em>que</em> des informations 589 concernant le contrôle d'accès, l'authentification et 590 l'autorisation. Il ne renvoie <em>pas</em> d'informations 591 concernant le code d'état que le gestionnaire configuré 592 (static file, CGI, proxy, etc...) aurait, quant à lui, 593 retourné.</p></li> 594 </ul> 595 596 <div class="note"><h3>Note :</h3> 597 Tous ces tests peuvent aussi être préfixés par un point 598 d'exclamation ('!') pour inverser leur signification. 599 </div> 600 </li> 601 602 <li>Vous pouvez aussi définir certains drapeaux pour 603 l'<em>expression_de_comparaison</em> en ajoutant ces 604 <strong><code>[</code><em>drapeaux</em><code>]</code></strong> 605 comme troisième argument de la directive 606 <code>RewriteCond</code>, où <em>drapeaux</em> est un 607 sous-ensemble séparé par des virgules des drapeaux suivants : 608 609 <ul> 610 <li>'<strong><code>nocase|NC</code></strong>' 611 (<strong>n</strong>o <strong>c</strong>ase)<br /> 612 Rend le test insensible à la casse - il n'est pas fait de 613 distinction entre majuscules et minuscules, à la fois dans le 614 développement de <em>chaîne_de_test</em> et dans 615 <em>expression_de_comparaison</em>. Ce drapeau n'est pris en 616 compte que lors d'une comparaison entre <em>chaîne_de_test</em> 617 et <em>expression_de_comparaison</em>. Il ne l'est pas pour les 618 vérification par sous-requêtes ou sur le système de 619 fichiers.</li> 620 621 <li> 622 '<strong><code>ornext|OR</code></strong>' 623 (<strong>ou</strong> condition suivante)<br /> 624 Permet de chaîner les conditions de règles avec un OU au 625 lieu du AND implicite. Exemple typique : 626 627 <div class="example"><pre>RewriteCond %{REMOTE_HOST} ^hote1 [OR] 628 RewriteCond %{REMOTE_HOST} ^hote2 [OR] 629 RewriteCond %{REMOTE_HOST} ^hote3 630 RewriteRule ...règles concernant tous ces hôtes...</pre></div> 631 632 Sans ce drapeau, les paires 633 condition/règle devraient être écrites trois fois. 634 </li> 635 636 <li>'<strong><code>novary|NV</code></strong>' 637 (<strong>n</strong>o <strong>v</strong>ary)<br /> 638 Si la condition contient un en-tête HTTP, ce drapeau empêche 639 ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br /> 640 L'utilisation de ce drapeau peut provoquer une mise en cache 641 incorrecte de la réponse, si la représentation de cette réponse 642 varie avec la valeur de l'en-tête considéré. Ce drapeau ne 643 devrait donc être utilisé que si l'on maîtrise parfaitement le 644 fonctionnement de l'en-tête Vary. 645 </li> 646 </ul> 647 </li> 648 </ol> 649 650 <p><strong>Exemple :</strong></p> 651 652 <p>Pour réécrire la page d'accueil d'un site en fonction de 653 l'en-tête ``<code>User-Agent:</code>'' de la requête, vous 654 pouvez utiliser ce qui suit : </p> 655 656 <div class="example"><pre>RewriteCond %{HTTP_USER_AGENT} ^Mozilla 657 RewriteRule ^/$ /homepage.max.html [L] 658 659 RewriteCond %{HTTP_USER_AGENT} ^Lynx 660 RewriteRule ^/$ /homepage.min.html [L] 661 662 RewriteRule ^/$ /homepage.std.html [L]</pre></div> 663 664 <p>Explications : si vous utilisez un navigateur 665 (Netscape Navigator, Mozilla etc) qui s'identifie comme 666 'Mozilla', vous accèderez à la page d'accueil max (qui 667 peut contenir des frames, ou d'autres ressources 668 particulières). 669 Si vous utilisez le navigateur Lynx (qui est un navigateur 670 basé sur le texte), vous accèderez à une page d'accueil min 671 (qui peut être une version conçue pour une navigation simple 672 basée sur le texte). 673 Si aucune de ces conditions n'est satisfaite (vous utilisez tout 674 autre navigateur, ou votre navigateur s'identifie de manière non 675 standard), vous accèderez à la page d'accueil std 676 (standard).</p> 677 678 679 </div> 680 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 681 <div class="directive-section"><h2><a name="rewriteengine" id="rewriteengine">Directive</a> <a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a></h2> 682 <table class="directive"> 683 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active ou désactive l'exécution du 684 moteur de réécriture</td></tr> 685 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteEngine on|off</code></td></tr> 686 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>RewriteEngine off</code></td></tr> 687 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr> 688 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr> 689 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 690 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 691 </table> 692 693 <p>La directive <code class="directive">RewriteEngine</code> active ou 694 désactive l'exécution du moteur de réécriture. Si sa valeur est 695 <code>off</code>, ce module n'exécutera aucun traitement et ne 696 mettra pas à jour les variables d'environnement 697 <code>SCRIPT_URx</code>.</p> 698 699 <p>Pour désactiver le module, il vaut mieux utiliser cette 700 directive que commenter toutes les directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code> !</p> 701 702 <p>Notez que les hôtes virtuels n'héritent pas des 703 configurations de réécriture. Ceci implique que vous devez 704 insérer une directive <code>RewriteEngine on</code> dans chaque 705 hôte virtuel pour lequel vous souhaitez utiliser des règles 706 de réécriture.</p> 707 708 <p>Les directives <code class="directive">RewriteMap</code> du type 709 <code>prg</code> ne sont pas prises en compte au cours de 710 l'initialisation du serveur si elle ont été définies dans un 711 contexte où la directive <code class="directive">RewriteEngine</code> n'a 712 pas été définie à <code>on</code>.</p> 713 714 </div> 715 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 716 <div class="directive-section"><h2><a name="rewritelock" id="rewritelock">Directive</a> <a name="RewriteLock" id="RewriteLock">RewriteLock</a></h2> 717 <table class="directive"> 718 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nom du fichier verrou utilisé pour la 719 synchronisation de <code class="directive"><a href="#rewritemap">RewriteMap</a></code></td></tr> 720 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteLock <em>chemin du fichier verrou</em></code></td></tr> 721 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr> 722 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 723 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 724 </table> 725 <p>Cette directive définit le nom du fichier utilisé comme 726 fichier verrou de synchronisation nécessaire à mod_rewrite pour 727 communiquer avec les <em>programmes</em> liés à <code class="directive"><a href="#rewritemap">RewriteMap</a></code>. Définissez ce 728 fichier verrou dans un chemin local (et non sur un montage NFS) 729 si vous voulez utiliser un programme de comparaison pour la 730 réécriture. Il n'est pas nécessaire pour les autres types de 731 comparaison pour la réécriture.</p> 732 733 </div> 734 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 735 <div class="directive-section"><h2><a name="rewritelog" id="rewritelog">Directive</a> <a name="RewriteLog" id="RewriteLog">RewriteLog</a></h2> 736 <table class="directive"> 737 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit le nom du fichier utilisé pour la journalisation 738 des traitements du moteur de réécriture</td></tr> 739 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteLog <em>chemin du fichier journal|redirection vers un pipe</em></code></td></tr> 740 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr> 741 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 742 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 743 </table> 744 <p>La directive <code class="directive">RewriteLog</code> définit le nom 745 du fichier dans lequel le serveur journalise tout processus de 746 réécriture qu'il effectue. Si le nom ne commence pas par un 747 slash ('<code>/</code>'), il est considéré comme relatif à la 748 <em>Racine du serveur</em>. Cette directive ne doit apparaître 749 qu'une seule fois dans la configuration du serveur.</p> 750 751 <div class="note"> Il est déconseillé de positionner 752 <em>chemin du fichier journal</em> à <code>/dev/null</code> 753 pour désactiver la journalisation des processus de réécriture, 754 car même si le moteur de réécriture n'envoie plus sa sortie 755 dans un fichier, il continue à créer un fichier journal en 756 interne, <strong>ce qui va avoir pour effet de ralentir le 757 serveur sans fournir aucun avantage à l'administrateur ! 758 </strong> Pour désactiver la journalisation, vous pouvez 759 soit supprimer ou commenter la directive 760 <code class="directive">RewriteLog</code>, soit utiliser 761 <code>RewriteLogLevel 0</code> ! 762 </div> 763 764 <p>Le format de fichier journal <code class="directive">RewriteLog</code> se 765 présente comme suit :</p> 766 767 <table> 768 <tr><th>Description</th><th> Exemple</th></tr> 769 <tr> 770 <td>Adresse IP de l'hôte distant</td> 771 <td>192.168.200.166</td></tr> 772 <tr><td>Nom de login didtant</td><td>en général "-"</td></tr> 773 <tr><td>nom d'authentification de l'utilisateur HTTP</td><td>nom 774 d'utilisateur, ou "-" si non authentifié</td></tr> 775 <tr><td>Date et heure de la requête</td><td>[28/Aug/2009:13:09:09 --0400]</td></tr> 776 <tr><td>Serveur virtuel et son identifiant</td><td>[www.example.com/sid#84a650]</td></tr> 777 <tr><td>Identifiant de la requête et indication éventuelle qu'il s'agit 778 d'une sous-requête</td><td>[rid#9f0e58/subreq]</td></tr> 779 <tr><td>Niveau de sévérité de l'entrée du journal</td><td>(2)</td></tr> 780 <tr><td>Message d'erreur au format texte</td><td>forcing proxy-throughput with http://127.0.0.1:8080/index.html</td></tr> 781 </table> 782 783 784 <div class="note"><h3>Sécurité</h3> 785 786 Se référer au document 787 <a href="../misc/security_tips.html">Conseils à propos 788 de la sécurité dans Apache</a> pour plus de détails sur la manière 789 dont votre sécurité pourrait être compromise si le répertoire où se 790 trouvent les fichiers journaux est inscriptible par quiconque 791 autre que l'utilisateur qui démarre le serveur. 792 </div> 793 794 <div class="example"><h3>Exemple</h3><p><code> 795 # Journalisation dans un fichier :<br /> 796 RewriteLog "/usr/local/var/apache/logs/rewrite.log"<br /> 797 <br /> 798 # Journalisation redirigée vers un pipe:<br /> 799 RewriteLog "|/path/to/parser.pl" 800 </code></p></div> 801 802 803 </div> 804 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 805 <div class="directive-section"><h2><a name="rewriteloglevel" id="rewriteloglevel">Directive</a> <a name="RewriteLogLevel" id="RewriteLogLevel">RewriteLogLevel</a></h2> 806 <table class="directive"> 807 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit la verbosité du fichier journal utilisé 808 par le moteur de réécriture</td></tr> 809 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteLogLevel <em>niveau</em></code></td></tr> 810 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>RewriteLogLevel 0</code></td></tr> 811 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr> 812 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 813 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 814 </table> 815 <p>La directive <code class="directive">RewriteLogLevel</code> définit 816 le niveau de verbosité du fichier journal de réécriture. Le 817 niveau par défaut 0 signifie aucune journalisation, tandis que 818 9 ou plus signifie que pratiquement toutes les actions sont 819 journalisées.</p> 820 821 <p>Pour désactiver la journalisation des actions de réécriture, 822 positionnez simplement <em>niveau</em> à 0. Ceci désactive 823 toute journalisation des actions de réécriture.</p> 824 825 <div class="note"> Utiliser une valeur élevée pour <em>niveau</em> va ralentir 826 considérablement votre serveur Apache ! N'utilisez une 827 journalisation de la réécriture à un <em>niveau</em> 828 supérieur à 2 qu'à des fins de débogage ! 829 </div> 830 831 <div class="example"><h3>Exemple</h3><p><code> 832 RewriteLogLevel 3 833 </code></p></div> 834 835 836 </div> 837 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 838 <div class="directive-section"><h2><a name="rewritemap" id="rewritemap">Directive</a> <a name="RewriteMap" id="RewriteMap">RewriteMap</a></h2> 839 <table class="directive"> 840 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit une fonction de mise en correspondance pour la 841 recherche de mots-clés</td></tr> 842 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteMap <em>nom_de_la_correspondance</em> <em>type_de_correspondance</em>:<em>source_de_la_correspondance</em> 843 </code></td></tr> 844 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr> 845 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 846 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 847 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Il est possible de choisir entre plusieurs types de 848 bases de données depuis la version 2.0.41 d'Apache</td></tr> 849 </table> 850 <p>La directive <code class="directive">RewriteMap</code> définit une 851 <em>Table de correspondance pour la réécriture</em> que les 852 fonctions de mise en correspondance 853 peuvent utiliser dans les chaînes de substitution des règles 854 pour insérer/substituer des champs en recherchant des mots-clés. 855 La source utilisée pour cette recherche peut être de plusieurs 856 types.</p> 857 858 <p><a id="mapfunc" name="mapfunc"><em>nom de la 859 correspondance</em></a> est le nom de la table de correspondance 860 et servira à spécifier une fonction de mise en correspondance 861 pour les chaînes de substitution d'une règle de réécriture selon 862 une des constructions suivantes :</p> 863 864 <p class="indent"> 865 <strong><code>${</code> <em>nom de la 866 correspondance</em> <code>:</code> 867 <em>mot-clé</em> <code>}</code><br /> 868 <code>${</code> <em>nom de la 869 correspondance</em> <code>:</code> 870 <em>mot-clé</em> <code>|</code> <em>valeur par défaut</em> 871 <code>}</code></strong> 872 </p> 873 874 <p>Lorsqu'une telle construction est rencontrée, la table de 875 correspondance <em>Nom de la correspondance</em> est consultée 876 et la clé <em>mot-clé</em> recherchée. Si la clé est trouvée, la 877 construction est remplacée par 878 la <em>valeur de remplacement</em>. Si la clé n'est pas trouvée, 879 elle est remplacée par la <em>valeur par défaut</em>, ou par une 880 chaîne vide si aucune <em>valeur par défaut</em> n'est 881 spécifiée. La valeur vide se comporte comme si la 882 clé était absente ; il est donc impossible de distinguer une 883 valeur vide d'une absence de clé.</p> 884 885 <p>Par exemple, vous pouvez définir une directive 886 <code class="directive">RewriteMap</code> comme suit </p> 887 888 <div class="example"><p><code> 889 RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt 890 </code></p></div> 891 892 <p>Vous pourrez ensuite utiliser cette table dans une 893 directive <code class="directive">RewriteRule</code> comme suit :</p> 894 895 <div class="example"><p><code> 896 RewriteRule ^/ex/(.*) ${map-exemple:$1} 897 </code></p></div> 898 899 <p>Les combinaisons suivantes pour <em>type_de_correspondance</em> 900 et <em>source_de_la_correspondance</em> 901 peuvent être utilisées :</p> 902 903 <ul> 904 <li> 905 <strong>Format texte standard</strong><br /> 906 type de correspondance : <code>txt</code>, source de la 907 correspondance : chemin du système de fichiers Unix vers un 908 fichier régulier valide 909 910 <p>Il s'agit de la mise en oeuvre standard de la table de 911 correspondance pour la réécriture où 912 <em>source_de_la_correspondance</em> est un fichier ASCII 913 dont les différentes lignes sont soit des lignes vides, soit 914 des lignes de commentaires (commençant par un caractère "#"), 915 soit des paires de valeurs (une seule paire 916 par ligne) comme suit :</p> 917 918 <p class="indent"> 919 <strong><em>mot-clé</em> 920 <em>valeur de remplacement</em></strong> 921 </p> 922 923 <div class="example"><h3>Exemple</h3><pre>## 924 ## map.txt -- table de correspondance pour la réécriture 925 ## 926 927 Ralf.S.Engelschall rse # Bastard Operator From Hell 928 (traduction à votre convenance) 929 Mr.Joe.Average joe # Mr. Average</pre></div> 930 931 <div class="example"><p><code> 932 RewriteMap real-to-user txt:/chemin/vers/fichier/map.txt 933 </code></p></div> 934 </li> 935 936 <li> 937 <strong>Format texte avec valeurs aléatoires</strong><br /> 938 type de correspondance: <code>rnd</code>, 939 source de la correspondance : chemin du système de fichiers 940 Unix vers un fichier régulier valide 941 942 <p>Ce format se différencie du format texte standard 943 précédent par l'ajout d'un traitement supplémentaire : en 944 plus de la recherche de clés, le fichier est interprété en 945 tenant compte de la présence éventuelle dans les valeurs de 946 remplacement de caractères ``<code>|</code>'' signifiant 947 ``ou''. En d'autres termes, ces caractères ``<code>|</code>'' 948 permettent de spécifier un jeu de valeurs parmi lesquelles 949 la valeur de retour sera choisie aléatoirement. Par exemple, 950 vous pouvez utiliser les fichier de correspondance et 951 directives suivants pour mettre en oeuvre une répartition de 952 charge aléatoire entre plusieurs serveurs en arrière-plan, 953 via un mandataire inverse. Les images sont envoyées à un des 954 serveurs de l'ensemble "statique", tandis que tout le 955 reste est envoyé à un des serveurs de l'ensemble 956 "dynamique".</p> 957 <p>Exemple:</p> 958 959 <div class="example"><h3>Fichier de correspondances pour la réécriture</h3><pre>## 960 ## map.txt -- correspondances pour la réécriture 961 ## 962 963 static www1|www2|www3|www4 964 dynamic www5|www6</pre></div> 965 966 <div class="example"><h3>Directives de configuration</h3><p><code> 967 RewriteMap serveurs rnd:/chemin/vers/fichier/map.txt<br /> 968 <br /> 969 RewriteRule ^/(.*\.(png|gif|jpg)) http://${serveurs:static}/$1 970 [NC,P,L]<br /> 971 RewriteRule ^/(.*) http://${serveurs:dynamic}/$1 [P,L] 972 </code></p></div> 973 </li> 974 975 <li> 976 <strong>Fichier à accès direct (Hash file)</strong><br /> 977 type de correspondance : 978 <code>dbm[=<em>type</em>]</code>, source de la 979 correspondance : chemin du système de fichiers Unix vers un 980 fichier régulier valide 981 982 <p>Ici, la source de la correspondance est un fichier binaire 983 au format DBM contenant les mêmes données qu'un fichier au 984 format <em>Plein texte</em>, mais selon une représentation 985 particulière optimisée en vue d'une recherche très rapide. 986 Le <em>type</em> peut être sdbm, gdbm, ndbm, ou db selon la 987 configuration à la <a href="../install.html#dbm">compilation 988 </a>. Si <em>type</em> est omis, la valeur retenue 989 sera la valeur par défaut définie à la compilation.</p> 990 991 <p>La création du fichier dbm à partir d'un fichier texte 992 s'effectue à l'aide de l'utilitaire <a href="../programs/httxt2dbm.html">httxt2dbm</a>.</p> 993 994 <div class="example"><p><code> 995 $ httxt2dbm -i fichier-source.txt -o fichier-dbm.map 996 </code></p></div> 997 </li> 998 999 <li> 1000 <strong>Fonction interne</strong><br /> 1001 type de la correspondance : <code>int</code>, 1002 source de la correspondance : fonction interne à Apache 1003 1004 <p>Ici, la source de la correspondance est une fonction 1005 interne à Apache. Les développeurs de modules peuvent 1006 fournir des fonctions internes supplémentaires en les 1007 enregistrant via l'API 1008 <code>ap_register_rewrite_mapfunc</code>. Les fonctions 1009 fournies par défaut sont :</p> 1010 1011 <ul> 1012 <li><strong>toupper</strong>:<br /> 1013 Convertit tous les caractères de la clé en majuscules.</li> 1014 1015 <li><strong>tolower</strong>:<br /> 1016 Convertit tous les caractères de la clé en minuscules.</li> 1017 1018 <li><strong>escape</strong>:<br /> 1019 Traduit les caractères spéciaux que contient la clé en 1020 séquences hexadécimales.</li> 1021 1022 <li><strong>unescape</strong>:<br /> 1023 Reconvertit les séquences hexadécimales que contient la 1024 clé en caractères spéciaux.</li> 1025 </ul> 1026 </li> 1027 1028 <li> 1029 <strong>Programme de réécriture externe</strong><br /> 1030 type de la correspondance : <code>prg</code>, 1031 source de la correspondance : 1032 chemin du système de fichiers Unix vers un 1033 fichier régulier valide 1034 1035 <p>Ici, la source n'est pas un fichier de correspondances, 1036 mais un programme. Pour le créer, vous pouvez utiliser le 1037 langage de votre choix, mais le programme doit être un 1038 exécutable (soit du code objet, soit un script 1039 contenant le fameux 1040 "<code>#!/chemin/vers/interpréteur</code>" au début de sa 1041 première ligne).</p> 1042 1043 <p>Ce programme est lancé une seule fois au démarrage du 1044 serveur Apache, puis communique avec le moteur de réécriture 1045 via ses entrée et sortie standards (<code>stdin</code> 1046 et <code>stdout</code>). A chaque recherche effectuée par la 1047 fonction de correspondance, il reçoit sur son entrée standard 1048 la clé à rechercher sous la forme d'une chaîne de caractères 1049 terminée par le caractère "nouvelle ligne". Il doit ensuite 1050 renvoyer sur sa sortie standard la valeur recherchée sous 1051 la forme d'une chaîne de caractères terminée par le caractère 1052 "nouvelle ligne", ou la chaîne de quatre 1053 caractères ``<code>NULL</code>'' en cas d'échec 1054 (<em>c'est à dire</em> 1055 si aucune valeur ne correspond à la clé fournie). Voici un 1056 exemple de ce pourrait être un programme trivial qui 1057 implémenterait une correspondance 1:1 (<em>c'est à dire</em>, 1058 clé == valeur) :</p> 1059 1060 <p>Les programmes de réécriture externes ne seront pas lancés 1061 s'ils ont été définis dans un contexte où la directive 1062 <code class="directive">RewriteEngine</code> n'a pas été définie à 1063 <code>on</code>.</p> 1064 1065 <div class="example"><pre>#!/usr/bin/perl 1066 $| = 1; 1067 while (<STDIN>) { 1068 # ...insérer ici le code de transformation ou de recherche... 1069 print $_; 1070 }</pre></div> 1071 1072 <p>Mais soyez très prudent :</p> 1073 1074 <ol> 1075 <li>``<em>Ce programme doit être simple, basique</em>'' 1076 (MERCI). 1077 Si ce programme se bloque, il bloquera aussi Apache 1078 lorsqu'il tentera d'utiliser la règle de réécriture 1079 correspondante.</li> 1080 1081 <li>L'utilisation d'entrées/sorties avec tampon sur 1082 <code>stdout</code> est une erreur courante. Ceci est à 1083 proscrire sous peine de créer une boucle infernale ! Pour 1084 éviter ceci, on utilise ``<code>$|=1</code>'' comme dans 1085 l'exemple ci-dessus.</li> 1086 1087 <li>On peut définir la directive <code class="directive"><a href="#rewritelock">RewriteLock</a></code> pour spécifier 1088 un fichier verrou que mod_rewrite pourra utiliser pour 1089 synchroniser les communications avec le programme de 1090 correspondance. Par défaut, aucune synchronisation de ce 1091 type n'est mise en oeuvre.</li> 1092 </ol> 1093 </li> 1094 1095 1096 </ul> 1097 <p>La directive <code class="directive">RewriteMap</code> peut 1098 apparaître plusieurs fois. Utilisez une directive 1099 <code class="directive">RewriteMap</code> par fonction de correspondance 1100 pour déclarer son fichier de correspondance pour la réécriture. 1101 Bien que vous ne puissiez pas <strong>déclarer</strong> une 1102 table de correspondance dans un contexte de répertoire, vous 1103 pouvez bien entendu <strong>utiliser</strong> cette table dans un 1104 contexte de répertoire. </p> 1105 1106 <div class="note"><h3>Note</h3> En ce qui concerne les fichiers au format DBM 1107 et plein texte, les clés de recherches sont mises en cache en interne 1108 jusqu'à ce que le <code>mtime (date de modification)</code> du fichier 1109 soit modifié, ou que le serveur soit redémarré. Ainsi, certaines 1110 fonctions de correspondance dans les règles peuvent être utilisées pour 1111 <strong>chaque</strong> requête. Cela ne pose pas problème, car la 1112 recherche externe n'intervient qu'une seule fois ! 1113 </div> 1114 1115 1116 </div> 1117 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 1118 <div class="directive-section"><h2><a name="rewriteoptions" id="rewriteoptions">Directive</a> <a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a></h2> 1119 <table class="directive"> 1120 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options spéciales 1121 pour le moteur de réécriture</td></tr> 1122 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr> 1123 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr> 1124 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr> 1125 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 1126 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 1127 <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td><code>MaxRedirects</code> n'est plus disponible depuis 1128 la version version 2.1</td></tr> 1129 </table> 1130 1131 <p>La directive <code class="directive">RewriteOptions</code> définit 1132 certaines options spéciales pour la configuration au niveau du 1133 serveur ou du répertoire. La chaîne de caractères <em>Option</em> 1134 ne peut actuellement prendre qu'une des valeurs suivantes :</p> 1135 1136 <dl> 1137 <dt><code>inherit</code></dt> 1138 <dd> 1139 1140 <p>Ceci force la configuration locale à hériter de la 1141 configuration du niveau supérieur. Dans le contexte des hôtes 1142 virtuels, cela signifie que les correspondances, conditions et 1143 règles du serveur principal sont héritées. Dans le contexte des 1144 répertoires, cela signifie que les conditions et règles de la 1145 configuration <code>.htaccess</code> du répertoire parent sont 1146 héritées.</p> 1147 1148 <div class="warning"> 1149 Les règles héritées du niveau parent sont appliquées 1150 <strong>after</strong> après les règles spécifiées dans le niveau 1151 enfant. 1152 </div> 1153 1154 </dd> 1155 1156 <dt><code>AllowAnyURI</code></dt> 1157 <dd> 1158 1159 <p>A partir de la version 2.2.23 de httpd, lorsqu'une directive 1160 <code class="directive"><a href="#rewriterule">RewriteRule</a></code> est 1161 utilisée dans un contexte de <code>serveur virtuel</code> ou de 1162 serveur principal, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ne la traitera que 1163 si l'URI de la requête correspond à un <a href="./directive-dict.html#Syntax">chemin d'URL</a>. Ceci permet 1164 d'éviter certains problèmes de sécurité où certaines règles 1165 peuvent permettre l'expansion de modèles inattendus (voir <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3368">CVE-2011-3368</a> 1166 et <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4317">CVE-2011-4317</a>). 1167 Pour lever cette restriction, on peut activer l'option 1168 <code>AllowAnyURI</code>, et <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> va alors 1169 appliquer le jeu de règles à tout URI de requête, sans vérifier si 1170 la chaîne respecte la grammaire des chemins d'URL définie dans la 1171 spécification HTTP.</p> 1172 1173 <div class="warning"> 1174 <h3>Avertissement en matière de sécurité</h3> 1175 1176 <p>L'activation de cette option expose le serveur à des 1177 problèmes de sécurité si les règles de réécriture n'ont pas été 1178 rédigées avec soin. Il est donc <strong>fortement 1179 recommandé</strong> de ne pas utiliser cette option. En 1180 particulier, prenez garde aux chaînes d'entrée contenant le 1181 caractère '<code>@</code>' qui peut modifier l'interprétation de 1182 l'URI transformé, comme indiqué dans les CVE ci-dessus.</p> 1183 </div> 1184 </dd> 1185 1186 <dt><code>MergeBase</code></dt> 1187 <dd> 1188 1189 <p>Avec cette option, la valeur de <code class="directive"><a href="#rewritebase">RewriteBase</a></code> est copiée depuis une 1190 origine explicitement définie dans tout sous-répertoire qui ne 1191 définit pas sa propre <code class="directive"><a href="#rewritebase">RewriteBase</a></code>. Par défaut, jusqu'à 1192 la version 2.2.22, cette valeur n'était pas copiée, alors qu'elle 1193 l'était avec la version 2.2.23 du serveur HTTP Apache. Le drapeau 1194 permettant de contrôler explicitement ce comportement est 1195 disponible depuis la version 2.2.24.</p> 1196 </dd> 1197 </dl> 1198 1199 1200 </div> 1201 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> 1202 <div class="directive-section"><h2><a name="rewriterule" id="rewriterule">Directive</a> <a name="RewriteRule" id="RewriteRule">RewriteRule</a></h2> 1203 <table class="directive"> 1204 <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> 1205 <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule 1206 <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr> 1207 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr> 1208 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr> 1209 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 1210 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr> 1211 </table> 1212 <p>La directive <code class="directive">RewriteRule</code> est le 1213 véritable cheval de trait de la réécriture. La directive peut 1214 apparaître plusieurs fois, chaque instance définissant une 1215 règle de réécriture particulière. L'ordre dans lequel ces règles 1216 sont définies est important - il s'agit de l'ordre dans lequel 1217 les règles seront appliquées au cours du processus de 1218 réécriture.</p> 1219 1220 <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une 1221 <a id="regexp" name="regexp">expression rationnelle</a> 1222 compatible perl. Dans la première règle de réécriture, 1223 l'expression est comparée au 1224 <a href="./directive-dict.html#Syntax">chemin de l'URL</a> de la 1225 requête (%-decoded) ; les expressions suivantes sont comparées à la sortie de 1226 la dernière règle de réécriture qui a été appliquée.</p> 1227 1228 <div class="note"><h3>Qu'est-ce qui est comparé ?</h3> 1229 1230 <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 1231 d'abord comparé à la portion de l'URL située entre le nom d'hôte 1232 éventuellement accompagné du port, et la chaîne de paramètres (par 1233 exemple "/app1/index.html").</p> 1234 1235 <p>Dans les contextes de répertoire <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> et htaccess, le 1236 <em>modèle</em> est tout d'abord comparé au chemin du <em>système 1237 de fichiers</em>, après suppression du préfixe ou chemin de base 1238 ayant conduit à la règle <code class="directive">RewriteRule</code> (par 1239 exemple "app1/index.html" ou 1240 "index.html" selon l'endroit où les directives sont définies).</p> 1241 1242 <p>Si vous voulez effectuer une comparaison en tenant compte du 1243 nom d'hôte, du port ou de la chaîne de paramètres, utilisez une 1244 directive <code class="directive"><a href="#rewritecond">RewriteCond</a></code> 1245 comportant les variables 1246 <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou 1247 <code>%{QUERY_STRING}</code>.</p> 1248 1249 </div> 1250 1251 <div class="note"><h3>Réécritures dans un contexte de répertoire</h3> 1252 <ul> 1253 <li>L'utilisation du moteur de réécriture dans les 1254 fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections 1255 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> est un peu plus 1256 complexe.</li> 1257 1258 <li>Pour activer le moteur de réécriture dans ces contextes, vous devez 1259 définir "<code>RewriteEngine On</code>" <strong>et</strong> 1260 "<code>Options FollowSymLinks</code>". Si l'administrateur a désactivé 1261 la possibilité de modifier l'option <code>FollowSymLinks</code> au 1262 niveau du répertoire d'un utilisateur, vous ne pouvez pas utiliser le 1263 moteur de réécriture. Cette restriction a été instaurée à des fins de 1264 sécurité.</li> 1265 1266 <li>Lorsqu'on utilise le moteur de réécriture dans un fichier 1267 <code>.htaccess</code>, le chemin de base du répertoire courant (qui est 1268 toujours le même pour ce même répertoire) est automatiquement 1269 <em>supprimé</em> au cours de la comparaison avec le modèle de la règle 1270 de réécriture, et automatiquement <em>ajouté</em> lorsqu'une 1271 substitution relative (ne débutant pas par un slash ou un nom de 1272 protocole) arrive à la fin d'un jeu de règles. Voir la directive 1273 <code class="directive"><a href="#rewritebase">RewriteBase</a></code> pour plus de 1274 détails à propos de l'ajout du préfixe après les substitutions 1275 relatives.</li> 1276 1277 <li>Si vous souhaitez effectuer une comparaison en prenant en compte 1278 l'intégralité du 1279 chemin de l'URL dans un contexte de répertoire (htaccess), vous devez 1280 utiliser la variable <code>%{REQUEST_URI}</code> dans la directive 1281 <code class="directive">RewriteCond</code>.</li> 1282 1283 <li>Le prefixe supprimé se termine toujours par un slash, ce qui 1284 signifie que la comparaison s'effectue avec une chaîne qui ne comporte 1285 <em>jamais</em> de slash de début. Ainsi, un <em>modèle</em> contenant 1286 <code>^/</code> ne correspondra jamais dans un contexte de répertoire.</li> 1287 1288 <li>Bien que les règles de réécriture soient permises du point de vue de 1289 la syntaxe dans les sections <code class="directive"><a href="../mod/core.html#location"><Location></a></code> et <code class="directive"><a href="../mod/core.html#files"><Files></a></code>, elles n'y sont pas prises en compte, et 1290 n'y sont à priori d'aucune utilité.</li> 1291 </ul> 1292 </div> 1293 1294 <p>Pour quelques conseils à propos des <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le 1295 document <a href="../rewrite/intro.html#regex">Introduction à 1296 mod_rewrite</a>.</p> 1297 1298 <p>Dans mod_rewrite, on peut aussi utiliser le caractère NON 1299 ('<code>!</code>') comme préfixe de modèle. Ceci vous permet 1300 d'inverser la signification d'un modèle, soit pour dire 1301 ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à 1302 ce modèle</em>''. Le caractère NON peut donc être utilisé à 1303 titre exceptionnel, lorsqu'il est plus simple d'effectuer une 1304 comparaison avec le modèle inversé, ou dans la dernière règle 1305 par défaut.</p> 1306 1307 <div class="note"><h3>Note</h3> 1308 Si vous utilisez le caractère NON pour inverser la signification d'un 1309 modèle, vous ne pouvez pas inclure de parties génériques groupées dans 1310 le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond 1311 pas (autrement dit, sa négation correspond), les groupes sont vides. 1312 Ainsi, si vous utilisez des modèles inversés, vous ne pouvez 1313 pas vous référer aux groupes par <code>$N</code> dans la chaîne de 1314 substitution ! 1315 </div> 1316 1317 <p>Dans une règle de réécriture, 1318 <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne 1319 de caractères qui remplace le chemin de l'URL original qui 1320 correspondait au <em>Modèle</em>. <em>Substitution</em> peut 1321 être :</p> 1322 1323 <dl> 1324 1325 <dt>un chemin du système de fichiers</dt> 1326 1327 <dd>Il indique alors la localisation dans le système de 1328 fichiers de la ressource qui doit être envoyée au 1329 client. Les substitutions ne sont traitées en tant que chemin du 1330 système de fichiers que si les règles sont définies dans un 1331 contexte de serveur (virtualhost), et si le premier élément de ce 1332 chemin existe dans le système de fichiers.</dd> 1333 1334 <dt>chemin d'URL</dt> 1335 1336 <dd>Un chemin relatif à la valeur de <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui 1337 doit être servie. Notez que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> 1338 essaie de deviner si vous avez spécifié un chemin du système 1339 de fichiers ou un chemin d'URL en vérifiant si la première 1340 partie du chemin existe à la racine du système de fichiers. 1341 Par exemple, si vous avez spécifié comme chaîne de 1342 <em>Substitution</em> <code>/www/file.html</code>, cette 1343 dernière sera traitée comme un chemin d'URL <em>à moins</em> 1344 qu'un répertoire nommé <code>www</code> n'existe à la racine 1345 de votre système de fichiers (ou dans le cas d'une 1346 réécriture au sein d'un fichier <code>.htaccess</code>, 1347 relativement à la racine des documents), auquel cas la chaîne de 1348 substitution sera traitée comme un chemin du système de 1349 fichiers. Si vous désirez que d'autres directives de 1350 correspondance d'URL (comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>) soient appliquées au 1351 chemin d'URL résultant, utilisez le drapeau <code>[PT]</code> 1352 comme décrit ci-dessous.</dd> 1353 1354 <dt>URL absolue</dt> 1355 1356 <dd>Si une URL absolue est spécifiée, 1357 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> vérifie si le nom d'hôte 1358 correspond à celui de l'hôte local. Si c'est le cas, le 1359 protocole et le nom d'hôte sont supprimés, et ce qui reste est 1360 traité comme un chemin d'URL. Dans le cas contraire, une 1361 redirection externe vers l'URL indiquée est effectuée. Pour 1362 forcer une redirection externe vers l'hôte local, voir le 1363 drapeau <code>[R]</code> ci-dessous.</dd> 1364 1365 <dt><code>-</code> (tiret)</dt> 1366 1367 <dd>Un tiret indique qu'aucune substitution ne doit être 1368 effectuée (le chemin considéré est transmis sans changement). 1369 Ceci est utile quand un drapeau doit être appliqué sans 1370 modifier le chemin (voir ci-dessous).</dd> 1371 1372 </dl> 1373 1374 <p>En plus du texte, la chaîne <em>Substition</em> peut 1375 comporter :</p> 1376 1377 <ol> 1378 <li>des références arrières (<code>$N</code>) vers le modèle 1379 d'une directive RewriteRule</li> 1380 1381 <li>des références arrières (<code>%N</code>) vers le dernier 1382 modèle d'une directive RewriteCond qui correspondait</li> 1383 1384 <li>des variables du serveur comme dans les chaînes de test de 1385 condition d'une règle (<code>%{VARNAME}</code>)</li> 1386 1387 <li>des appels de 1388 <a href="#mapfunc">fonctions de comparaison</a> 1389 (<code>${nom correspondance:clé|défaut}</code>)</li> 1390 </ol> 1391 1392 <p>Les références arrières sont des identificateurs de la forme 1393 <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui 1394 seront remplacés par le contenu du <strong>N</strong>ème groupe 1395 du <em>Modèle</em> qui correspondait. Les variables du serveur 1396 sont les mêmes que dans la <em>Chaîne de test</em> d'une 1397 directive <code>RewriteCond</code>. Les fonctions de comparaison 1398 sont issues de la directive <code>RewriteMap</code> dans la 1399 section de laquelle elles sont décrites. Ces trois types de 1400 variables sont évaluées dans l'ordre ci-dessus.</p> 1401 1402 <p>Chaque règle de réécriture s'applique au résultat de la règle 1403 précédente, selon l'ordre dans lequel elles ont été définies dans 1404 le fichier de configuration. L'URL est <strong>intégralement 1405 remplacée</strong> par la chaîne de <em>Substitution</em> et le 1406 processus de réécriture se poursuit jusqu'à ce que toutes les 1407 règles aient été appliquées, ou qu'il soit explicitement stoppé 1408 par un drapeau <a href="../rewrite/flags.html#flag_l"><code><strong>L</strong></code></a>, 1409 ou par un autre drapeau qui implique un arrêt immédiat, comme 1410 <code><strong>F</strong></code>.</p> 1411 1412 <div class="note"><h3>Modifier la chaîne de requête</h3> 1413 <p>Par défaut, la chaîne de requête est transmise sans 1414 modification. Vous pouvez cependant créer dans la chaîne de 1415 substitution des URLs dont une partie constitue une chaîne de 1416 requête. Pour cela, ajoutez simplement un point d'interrogation 1417 dans la chaîne de substitution pour indiquer que le texte qui 1418 suit doit être réinjecté dans la chaîne de requête. Pour 1419 supprimer une chaîne de requête, terminez simplement la chaîne de 1420 substitution par un point d'interrogation. Pour combiner les 1421 nouvelles chaînes de requête avec les anciennes, utilisez le 1422 drapeau <code>[QSA]</code>.</p> 1423 </div> 1424 1425 <p>En outre, vous pouvez spécifier des <a name="rewriteflags" id="rewriteflags">actions</a> spéciales à effectuer en ajoutant 1426 des 1427 <strong><code>[</code><em>drapeaux</em><code>]</code></strong> 1428 comme troisième argument de la directive 1429 <code>RewriteRule</code>. <em>Flags</em> est une liste de valeurs 1430 déparées par des virgules, délimitée par des crochets, choisies 1431 parmi les drapeaux de la table suivante. Vous trouverez plus de 1432 détails et d'exemples, pour chaque drapeau, dans la <a href="../rewrite/flags.html">documentation sur les drapeaux de 1433 réécriture</a>.</p> 1434 1435 <table class="bordered"> 1436 <tr><th>Drapeaux et syntaxe</th> 1437 <th>Fonction</th> 1438 </tr> 1439 <tr> 1440 <td>B</td> 1441 <td>Echappe les caractères non-alphanumériques <em>avant</em> 1442 d'appliquer la transformation. <em><a href="../rewrite/flags.html#flag_b">détails ...</a></em></td> 1443 </tr> 1444 <tr> 1445 <td>chain|C</td> 1446 <td>La règle est chaînée avec la règle suivante. Si la règle 1447 échoue, la ou les règles avec lesquelles elle est est chaînée 1448 seront sautées. <em><a href="../rewrite/flags.html#flag_c">détails ...</a></em></td> 1449 </tr> 1450 <tr> 1451 <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td> 1452 <td>Définit un cookie au niveau du navigateur client. La syntaxe 1453 complète est : 1454 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> 1455 <em><a href="../rewrite/flags.html#flag_co">détails ...</a></em> 1456 </td> 1457 </tr> 1458 <tr> 1459 <td>discardpath|DPI</td> 1460 <td>Supprime la partie PATH_INFO de l'URI réécrit. <em><a href="../rewrite/flags.html#flag_dpi">détails 1461 ...</a></em></td> 1462 </tr> 1463 <tr> 1464 <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td> 1465 <td>Définit la variable d'environnement <em>VAR</em> (à la valeur 1466 <em>VAL</em> si elle est fournie). La variante !<em>VAR</em> 1467 annule la définition de la variable <em>VAR</em>.<em><a href="../rewrite/flags.html#flag_e">détails ...</a></em></td> 1468 </tr> 1469 <tr> 1470 <td>forbidden|F</td> 1471 <td>Renvoie une réponse 403 FORBIDDEN au navigateur client. 1472 <em><a href="../rewrite/flags.html#flag_f">détails ...</a></em></td> 1473 </tr> 1474 <tr> 1475 <td>gone|G</td> 1476 <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="../rewrite/flags.html#flag_g">détails ...</a></em></td> 1477 </tr> 1478 <tr> 1479 <td>Handler|H=<em>Gestionnaire de contenu</em></td> 1480 <td>L'URI résultant est envoyé au <em>Gestionnaire de 1481 contenu</em> pour traitement. <em><a href="../rewrite/flags.html#flag_h">détails ...</a></em></td> 1482 </tr> 1483 <tr> 1484 <td>last|L</td> 1485 <td>Arrête le processus de réécriture immédiatement et n'applique 1486 plus aucune règle. Prêtez une attention particulière aux mises 1487 en garde concernant les contextes de niveau répertoire et 1488 .htaccess. <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td> 1489 </tr> 1490 <tr> 1491 <td>next|N</td> 1492 <td>Réexécute le processus de réécriture à partir de la première 1493 règle, en utilisant le résultat du jeu de règles, sous réserve 1494 qu'il y ait un point de départ. <em><a href="../rewrite/flags.html#flag_n">détails 1495 ...</a></em></td> 1496 </tr> 1497 <tr> 1498 <td>nocase|NC</td> 1499 <td>Rend la comparaison entre modèles insensible à la casse. 1500 <em><a href="../rewrite/flags.html#flag_nc">détails ...</a></em></td> 1501 </tr> 1502 <tr> 1503 <td>noescape|NE</td> 1504 <td>Empêche mod_rewrite d'effectuer un échappement hexadécimal 1505 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> 1506 </tr> 1507 <tr> 1508 <td>nosubreq|NS</td> 1509 <td>La règle est sautée si la requête courante est une 1510 sous-requête interne. <em><a href="../rewrite/flags.html#flag_ns">détails ...</a></em></td> 1511 </tr> 1512 <tr> 1513 <td>proxy|P</td> 1514 <td>Force l'envoi en interne de l'URL de substitution en tant 1515 que requête mandataire. <em><a href="../rewrite/flags.html#flag_p">détails 1516 ...</a></em></td> 1517 </tr> 1518 <tr> 1519 <td>passthrough|PT</td> 1520 <td>L'URI résultant est repassé au moteur de mise en 1521 correspondance des URLs pour y être traité par d'autres 1522 traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou 1523 <code>Redirect</code>. <em><a href="../rewrite/flags.html#flag_pt">détails ...</a></em></td> 1524 </tr> 1525 <tr> 1526 <td>qsappend|QSA</td> 1527 <td>Ajoute toute chaîne de paramètres présente dans l'URL de la 1528 requête originale à toute chaîne de paramètres créée dans la 1529 cible de réécriture. <em><a href="../rewrite/flags.html#flag_qsa">détails ...</a></em></td> 1530 </tr> 1531 <tr> 1532 <td>qsdiscard|QSD</td> 1533 <td>Supprime toute chaîne de paramètres de l'URI entrant. <em><a href="../rewrite/flags.html#flag_qsd">détails 1534 ...</a></em></td> 1535 </tr> 1536 <tr> 1537 <td>redirect|R[=<em>code</em>]</td> 1538 <td>Force une redirection externe, avec un code de statut HTTP 1539 optionnel. <em><a href="../rewrite/flags.html#flag_r">détails ...</a></em> 1540 </td> 1541 </tr> 1542 <tr> 1543 <td>skip|S=<em>nombre</em></td> 1544 <td>Si la règle courante s'applique, le moteur de réécriture 1545 doit sauter les <em>nombre</em> règles suivantes. <em><a href="../rewrite/flags.html#flag_s">détails ...</a></em></td> 1546 </tr> 1547 <tr> 1548 <td>type|T=<em>MIME-type</em></td> 1549 <td>Force l'attribution du <a class="glossarylink" href="../glossary.html#type-mime" title="voir glossaire">Type-MIME</a> 1550 spécifié au fichier cible. <em><a href="../rewrite/flags.html#flag_t">détails ...</a></em></td> 1551 </tr> 1552 </table> 1553 1554 <div class="note"><h3>Développement du répertoire home</h3> 1555 <p> Quand la chaîne de substitution commence par quelque chose comme 1556 "/~user" (de manière explicite ou par références arrières), mod_rewrite 1557 développe le répertoire home sans tenir compte de la présence ou de la 1558 configuration du module <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p> 1559 1560 <p> Ce développement n'est pas effectué si le drapeau <em>PT</em> est 1561 utilisé dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p> 1562 </div> 1563 1564 <p>Voici toutes les combinaisons de substitution et leurs 1565 significations :</p> 1566 1567 <p><strong>Dans la configuration au niveau du serveur principal 1568 (<code>httpd.conf</code>)<br /> 1569 pour la requête ``<code>GET 1570 /chemin/infochemin</code>'':</strong><br /> 1571 </p> 1572 1573 <div class="note"><pre> 1574 <strong>Règle</strong> <strong>Résultat de la substitution</strong> 1575 ---------------------------------------------- ---------------------------------- 1576 ^/chemin(.*) autre-chemin$1 non valide, non supporté 1577 1578 ^/chemin(.*) autre-chemin$1 [R] non valide, non supporté 1579 1580 ^/chemin(.*) autre-chemin$1 [P] non valide, non supporté 1581 ---------------------------------------------- ---------------------------------- 1582 ^/chemin(.*) /autre-chemin$1 /autre-chemin/infochemin 1583 1584 ^/chemin(.*) /autre-chemin$1 [R] http://cet-hôte/autre-chemin/infochemin 1585 via redirection externe 1586 1587 ^/chemin(.*) /autre-chemin$1 [P] n'a pas lieu d'être, non supporté 1588 ---------------------------------------------- ---------------------------------- 1589 ^/chemin(.*) http://cet-hôte/autre-chemin$1 /autre-chemin/infochemin 1590 1591 ^/chemin(.*) http://cet-hôte/autre-chemin$1 [R] http://cet-hôte/autre-chemin/infochemin 1592 via redirection externe 1593 1594 ^/chemin(.*) http://cet-hôte/autre-chemin$1 [P] n'a pas lieu d'être, non supporté 1595 ---------------------------------------------- ---------------------------------- 1596 ^/chemin(.*) http://autre hôte/autre-chemin$1 http://autre hôte/autre-chemin/infochemin 1597 via redirection externe 1598 1599 ^/chemin(.*) http://autre hôte/autre-chemin$1 [R] http://autre hôte/autre-chemin/infochemin 1600 via redirection externe 1601 (le drapeau [R] est 1602 redondant) 1603 1604 ^/chemin(.*) http://autre hôte/autre-chemin$1 [P] http://autre hôte/autre-chemin/infochemin 1605 via un mandataire interne</pre></div> 1606 1607 <p><strong>Dans une configuration de niveau répertoire pour 1608 <code>/chemin</code><br /> 1609 (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec 1610 <code>RewriteBase /chemin</code>)<br /> 1611 pour la requête ``<code>GET 1612 /chemin/chemin-local/infochemin</code>'':</strong><br /> 1613 </p> 1614 1615 <div class="note"><pre> 1616 <strong>Règle</strong> <strong>Résultat de la substitution</strong> 1617 ---------------------------------------------- ---------------------------------- 1618 ^chemin-local(.*) autre-chemin$1 /chemin/autre-chemin/infochemin 1619 1620 ^chemin-local(.*) autre-chemin$1 [R] http://cet-hôte/chemin/autre-chemin/infochemin 1621 via redirection externe 1622 1623 ^chemin-local(.*) autre-chemin$1 [P] n'a pas lieu d'être, non supporté 1624 ---------------------------------------------- ---------------------------------- 1625 ^chemin-local(.*) /autre-chemin$1 /autre-chemin/infochemin 1626 1627 ^chemin-local(.*) /autre-chemin$1 [R] http://cet-hôte/autre-chemin/infochemin 1628 via redirection externe 1629 1630 ^chemin-local(.*) /autre-chemin$1 [P] n'a pas lieu d'être, non supporté 1631 ---------------------------------------------- ---------------------------------- 1632 ^chemin-local(.*) http://cet-hôte/autre-chemin$1 /autre-chemin/infochemin 1633 1634 ^chemin-local(.*) http://cet-hôte/autre-chemin$1 [R] http://cet-hôte/autre-chemin/infochemin 1635 via redirection externe 1636 1637 ^chemin-local(.*) http://cet-hôte/autre-chemin$1 [P] n'a pas lieu d'être, non supporté 1638 ---------------------------------------------- ---------------------------------- 1639 ^chemin-local(.*) http://autre hôte/autre-chemin$1 http://autre hôte/autre-chemin/infochemin 1640 via redirection externe 1641 1642 ^chemin-local(.*) http://autre hôte/autre-chemin$1 [R] http://autre hôte/autre-chemin/infochemin 1643 via redirection externe 1644 (le drapeau [R] est 1645 redondant) 1646 1647 ^chemin-local(.*) http://autre hôte/autre-chemin$1 [P] http://autre hôte/autre-chemin/infochemin 1648 via un mandataire interne</pre></div> 1649 1650 </div> 1651 </div> 1652 <div class="bottomlang"> 1653 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English"> en </a> | 1654 <a href="../fr/mod/mod_rewrite.html" title="Français"> fr </a></p> 1655 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div> 1656 <script type="text/javascript"><!--//--><![CDATA[//><!-- 1657 var comments_shortname = 'httpd'; 1658 var comments_identifier = 'http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html'; 1659 (function(w, d) { 1660 if (w.location.hostname.toLowerCase() == "httpd.apache.org") { 1661 d.write('<div id="comments_thread"><\/div>'); 1662 var s = d.createElement('script'); 1663 s.type = 'text/javascript'; 1664 s.async = true; 1665 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; 1666 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); 1667 } 1668 else { 1669 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); 1670 } 1671 })(window, document); 1672 //--><!]]></script></div><div id="footer"> 1673 <p class="apache">Copyright 2017 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> 1674 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.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[//><!-- 1675 if (typeof(prettyPrint) !== 'undefined') { 1676 prettyPrint(); 1677 } 1678 //--><!]]></script> 1679 </body></html>