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="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
    24  <div id="path">
    25  <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.2</a> &gt; <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">&nbsp;en&nbsp;</a> |
    37  <a href="../fr/mod/mod_rewrite.html" title="Français">&nbsp;fr&nbsp;</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">&lt;VirtualHost&gt;</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  &lt;Directory /opt/myapp-1.2.3&gt;
   198  RewriteEngine On
   199  RewriteBase /myapp/
   200  RewriteRule ^index\.html$  welcome.html 
   201  &lt;/Directory&gt;</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 &lt;= N &lt;= 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 &lt;= N &lt;= 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 &amp; 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>&lt;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>&gt;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 (&lt;STDIN&gt;) {
  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">&lt;Directory&gt;</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">&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
  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">&nbsp;en&nbsp;</a> |
  1654  <a href="../fr/mod/mod_rewrite.html" title="Français">&nbsp;fr&nbsp;</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&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>
  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>