svn commit: r1936056 - httpd/httpd/branches/2.4.x/docs/manual/mod
[email protected] Sat, 11 Jul 2026 15:04:12 -0000
| Newsgroups | gmane.comp.apache.cvs |
|---|---|
| Message-ID | <178378225282.2298355.189305513446781991@svn03-he-fi> |
Author: lgentis
Date: Sat Jul 11 15:04:12 2026
New Revision: 1936056
Log:
fr doc XML file update.
Modified:
httpd/httpd/branches/2.4.x/docs/manual/mod/mod_rewrite.xml.fr
Modified: httpd/httpd/branches/2.4.x/docs/manual/mod/mod_rewrite.xml.fr
==============================================================================
--- httpd/httpd/branches/2.4.x/docs/manual/mod/mod_rewrite.xml.fr Sat Jul 11 15:03:13 2026 (r1936055)
+++ httpd/httpd/branches/2.4.x/docs/manual/mod/mod_rewrite.xml.fr Sat Jul 11 15:04:12 2026 (r1936056)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1932386:1935383 (outdated) -->
+<!-- English Revision: 1936055 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
@@ -13,7 +13,7 @@
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
@@ -42,29 +42,32 @@ à la volée</description>
avec le système de fichiers. Cependant, on peut aussi l'utiliser
pour rediriger une URL vers une autre URL, ou pour invoquer une
requête interne à destination du mandataire.</p>
- <p><module>mod_rewrite</module> fournit une méthode souple et
- puissante pour manipuler les URLs en utilisant un nombre illimité
- de règles. Chaque règle peut être associée à un nombre illimité de
- conditions, afin de vous permettre de réécrire les URLs en
- fonction de variables du serveur, de variables d'environnement,
- d'en-têtes HTTP, ou de repères temporels.</p>
- <p><module>mod_rewrite</module> agit sur la totalité de l'URL, y
- compris la partie chemin. Une règle de réécriture peut être
- invoquée dans <code>httpd.conf</code> ou dans un fichier
- <code>.htaccess</code>. Le chemin généré par une règle de
- réécriture peut inclure une chaîne de paramètres, ou peut renvoyer
- vers un traitement secondaire interne, une redirection vers une
- requête externe ou vers le mandataire interne.</p>
-
- <p>Une expression rationnelle ne nécessite des guillemets que si elle
- contient des espaces non protégées, auquel cas les guillemets simples ou
- doubles sont équivalents.</p>
-
- <p>Vous trouverez d'avantage de détails, discussions et exemples
- dans la
- <a href="../rewrite/">documentation détaillée
- sur mod_rewrite</a>.</p>
+
+ <p><module>mod_rewrite</module> fournit une méthode souple et puissante
+ pour manipuler les URLs en utilisant un nombre illimité de règles. Chaque
+ règle peut être associée à un nombre illimité de conditions, afin de vous
+ permettre de réécrire les URLs en fonction de <a
+ href="#rewritecond">variables du serveur</a> (y compris les en-têtes
+ HTTP, les détails de la connexion et les horodatages), de
+ variables d'environnement ou d’autres propriétés de la requête. Les règles
+ peuvent agir sur le <a href="directive-dict.html#Syntax">chemin d’URL</a>
+ (y compris toute <a href="core.html#acceptpathinfo">information en fin de
+ nom de chemin</a>) et peut aussi modifier la <a
+ href="../expr.html#vars">chaîne de paramètres</a>.
+ </p>
+
+ <p>Une règle de réécriture peut être invoquée dans les fichiers de
+ configuration globale du serveur ou dans un <glossary
+ ref="perdirectory">contexte de répertoire</glossary>. La chaîne de
+ substitution d’une règle de réécriture peut comporter une chaîne de
+ paramètres et une règle peut renvoyer vers un traitement secondaire
+ interne, une redirection vers une requête externe ou vers le mandataire
+ interne.</p>
+
+ <p>Vous trouverez plus de détails, discussions et exemples dans le <a
+ href="../rewrite/">Guide détaillé sur mod_rewrite</a>.</p>
</summary>
+<seealso><a href="rewrite/index.html">Guide de mod_rewrite</a></seealso>
<section id="logging"><title>Journalisation</title>
@@ -83,27 +86,29 @@ à la volée</description>
supérieur à <code>trace2</code> qu'à des fins de débogage !
</note>
- <example><title>Exemple</title>
- <highlight language="config">
+ <example><title>Exemple</title>
+ <highlight language="config">
LogLevel alert rewrite:trace3
- </highlight>
- </example>
+ </highlight>
+ </example>
<note><title>RewriteLog</title>
<p>Ceux qui sont familiers avec les versions précédentes de
<module>mod_rewrite</module> vont probablement rechercher en vain les
- directives <code>RewriteLog</code> et
- <code>RewriteLogLevel</code>. Elles ont été en effet remplacées
- par une configuration de la journalisation par module, comme
- mentionné plus haut.
- </p>
+ directives <code>RewriteLog</code> et <code>RewriteLogLevel</code>. Depuis
+ la sortie de httpd 2.4, ces directives ont en effet été remplacées par une
+ configuration de la journalisation par module à l’aide de la directive
+ <directive module="core">LogLevel</directive>. </p>
<p>Pour extraire les traces spécifiques à
<module>mod_rewrite</module>, affichez le fichier journal en
redirigeant la sortie vers grep :</p>
- <example>
- tail -f error_log|fgrep '[rewrite:'
- </example>
+
+ <example>
+ <highlight language="sh">
+tail -f error_log|fgrep '[rewrite:'
+ </highlight>
+ </example>
</note>
</section>
@@ -455,15 +460,15 @@ répertoire</description>
<override>FileInfo</override>
<usage>
- <p>La directive <directive>RewriteBase</directive> permet de
- spécifier le préfixe d'URL à utiliser dans un contexte de
- répertoire (htaccess) pour les directives
- <directive module="mod_rewrite">RewriteRule</directive> qui réécrivent vers un chemin
+ <p>La directive <directive>RewriteBase</directive> permet de spécifier le
+ préfixe d'URL à utiliser dans un <glossary ref="perdirectory">contexte de
+ répertoire</glossary> (htaccess) pour les directives <directive
+ module="mod_rewrite">RewriteRule</directive> qui réécrivent vers un chemin
relatif.</p>
- <p>Cette directive est <em>obligatoire</em> si vous utilisez un
- chemin relatif dans une substitution, et dans un contexte de
- répertoire (htaccess), sauf si au moins une de ces conditions est
- vérifiée :</p>
+ <p>Cette directive est <em>obligatoire</em> si vous utilisez un chemin
+ relatif dans une substitution, et dans un <glossary
+ ref="perdirectory">contexte de répertoire</glossary> (htaccess), sauf si
+ au moins une de ces conditions est vérifiée :</p>
<ul>
<li>La requête initiale, ainsi que la substitution, se
situent par raport à la valeur de la directive
@@ -471,10 +476,10 @@ répertoire</description>
dire que pour y accéder, il n'est pas nécessaire d'utiliser
une directive telle qu'<directive
module="mod_alias">Alias</directive>).</li>
- <li>Le chemin du système de fichiers vers le répertoire
- contenant la <directive module="mod_rewrite">RewriteRule</directive>, suffixé par
- la substitution relative est aussi valide en tant qu'URL sur
- le serveur (ce qui est rare).</li>
+ <li>Le chemin de répertoire auquel la <directive
+ module="mod_rewrite">RewriteRule</directive> s’applique, suffixé par
+ la substitution relative est aussi valable en tant que chemin d'URL
+ sur le serveur (ce qui est rare).</li>
<li>A partir de la version 2.4.16 du serveur HTTP Apache,
cette directive peut être omise lorsque la requête est mise en
correspondance avec le système de fichiers via la directive
@@ -482,23 +487,6 @@ répertoire</description>
<module>mod_userdir</module>.</li>
</ul>
-<p>Dans l'exemple ci-dessous, la directive
-<directive>RewriteBase</directive> est nécessaire afin d'éviter une
-réécriture en http://example.com/opt/myapp-1.2.3/welcome.html car la
-ressource n'était pas relative à la racine des documents. Cette erreur
-de configuration aurait conduit le serveur à rechercher un répertoire
-"opt" à la racine des documents.</p>
-
-<highlight language="config">
-DocumentRoot "/var/www/example.com"
-AliasMatch "^/myapp" "/opt/myapp-1.2.3"
-<Directory "/opt/myapp-1.2.3">
- RewriteEngine On
- RewriteBase "/myapp/"
- RewriteRule "^index\.html$" "welcome.html"
-</Directory>
-</highlight>
-
</usage>
</directivesynopsis>
@@ -509,7 +497,7 @@ AliasMatch "^/myapp" "/opt/myapp-1.2.3"
la réécriture soit effectuée
</description>
<syntax> RewriteCond
- <em>chaîne_de_test</em> <em>expression_de_comparaison</em> [<em>drapeaux</em>]</syntax>
+ <em>TestString</em> [!]<em>CondPattern</em> [<em>flags</em>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
@@ -524,41 +512,69 @@ la réécriture soit effectuée
<strong>et</strong> si l'URI correspond au modèle spécifié dans la
règle.</p>
+ <p>Si <em>CondPattern</em> est préfixé par un <code>!</code>, la condition
+ ne sera évaluée à vrai que si <em>CondPattern</em> ne correspond pas.</p>
+
+ <!-- ============================================================ -->
+ <!-- TestString -->
+ <!-- ============================================================ -->
+
+ <p><a id="rewritecond-teststring" name="rewritecond-teststring"
+ ></a><strong>TestString</strong></p>
+
<p><em>TestString</em> est une chaîne qui peut contenir les
extensions suivantes en plus du texte simple :</p>
- <ul>
- <li>
- <strong>références arrières de règle de réécriture</strong> :
- ce sont des références arrières de la forme
- <strong><code>$N</code></strong> (0 <= N <= 9). $1 à $9
- permettent d'accéder aux parties regroupées (entre
- parenthèses) du modèle, issues de la <code>RewriteRule</code>
- concernée par le jeu de conditions <code>RewriteCond</code>
- courant. $0 donne accès à l'ensemble de la chaîne
- correspondant au modèle.</li>
- <li>
- <strong>Références arrières de condition de réécriture
- </strong> : ce sont des références arrières de la forme
- <strong><code>%N</code></strong> (0 <= N <= 9). %1 à %9
- permettent d'accéder aux parties regroupées (entre
- parenthèses) du modèle, issues de la dernière
- condition <code>RewriteCond</code> satisfaite du jeu de conditions <code>RewriteCond</code>
- courant. %0 donne accès à l'ensemble de la chaîne
- correspondant au modèle.</li>
- <li>
- <strong>extensions de table de réécriture</strong> :
- ce sont des extensions de la forme <strong><code
- >${nomTable:clé|défaut}</code></strong>. Voir la <a
- >href="#mapfunc">documentation sur RewriteMap</a>
- pour plus de détails.
- </li>
- <li>
- <strong>Variables du serveur</strong> :
- ce sont des variables de la forme
- <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
- où <em>NOM_DE_VARIABLE</em> peut contenir une chaîne issue
- de la liste suivante :
+ <!-- Backreferences -->
+
+ <p><a id="rewritecond-backreferences" name="rewritecond-backreferences"
+ ></a><strong>Références arrières</strong></p>
+
+ <dl>
+ <dt><strong><code>$N</code></strong> — Références arrières des
+ règles RewriteRule</dt>
+ <dd>Les références arrières de la forme <code>$N</code> (0 <= N <=
+ 9). $1 à $9 permettent d'accéder aux parties regroupées (entre
+ parenthèses) du modèle, issues de la <code>RewriteRule</code> concernée
+ par le jeu de conditions <code>RewriteCond</code> courant. $0 donne
+ accès à l'ensemble de la chaîne correspondant au modèle.</dd>
+
+ <dt><strong><code>%N</code></strong> — Références arrières des
+ conditions RewriteCond</dt>
+ <dd>Les références arrières de la forme <code>%N</code> (0 <= N <=
+ 9). %1 à %9 permettent d'accéder aux parties regroupées (entre
+ parenthèses) du modèle, issues de la dernière condition
+ <code>RewriteCond</code> satisfaite du jeu de conditions
+ <code>RewriteCond</code> courant. %0 donne accès à l'ensemble de la
+ chaîne correspondant au modèle.</dd>
+
+ </dl>
+
+ <note>Les références arrières ne sont définies que si le motif correspond.
+ Si le motif est préfixé de <code>!</code>, aucune référence arrière
+ ne sera donc définie. Voir le document <a
+ href="../rewrite/tech.html#InternalRuleset">La manière dont le jeu de
+ règles est appliqué</a> pour plus de détails à propos de l’ordre dans
+ lequel les motifs sont mis en correspondance et les références arrières
+ définies.</note>
+
+ <!-- RewriteMap Expansions -->
+
+ <p><a id="rewritecond-mapexpansions" name="rewritecond-mapexpansions"
+ ></a><strong>Développement des mappages RewriteMap</strong></p>
+
+ <p>Ce sont des développements de la forme
+ <strong><code>${mapname:key|default}</code></strong>. Voir la <a
+ href="#mapfunc">documentation de RewriteMap</a> pour plus de détails.</p>
+
+ <!-- Server and CGI Variables -->
+
+ <p><a id="rewritecond-servervars"
+ name="rewritecond-servervars"></a><strong>Le serveur et les variables CGI</strong></p>
+
+ <p>Ce sont des variables de la forme <strong><code>%{</code>
+ <em>NAME_OF_VARIABLE</em> <code>}</code></strong> où
+ <em>NAME_OF_VARIABLE</em> peut être une des chaînes de la liste suivante :</p>
<table>
<columnspec><column width=".3"/><column width=".3"/>
@@ -584,7 +600,7 @@ la réécriture soit effectuée
CONTEXT_PREFIX<br />
CONTEXT_DOCUMENT_ROOT<br />
IPV6<br />
- PATH_INFO<br />
+ <glossary ref="pathinfo">PATH_INFO</glossary><br />
QUERY_STRING<br />
REMOTE_ADDR<br />
REMOTE_HOST<br />
@@ -646,15 +662,37 @@ la réécriture soit effectuée
sont documentées dans la <a
href="../expr.html#vars">documentation des expressions</a>, dans
la <a href="../env.html">documentation des variables
- d'environnement</a> ou dans la <a
- href="http://www.ietf.org/rfc/rfc3875">spécification de
- CGI</a>.</p>
+ d’environnement</a> ou dans la spécification de
+ CGI (<rfc>3875</rfc>).</p>
<p>SERVER_NAME et SERVER_PORT dépendent respectivement
des valeurs des directives <directive
module="core">UseCanonicalName</directive> et <directive
module="core">UseCanonicalPhysicalPort</directive>.</p>
+ <p>Les variables SCRIPT_FILENAME et REQUEST_FILENAME contiennent
+ la même valeur — la valeur du champ <code>filename</code> de la
+ structure interne <code>request_rec</code> du serveur HTTP
+ Apache. Le premier nom est plus connu en tant que nom de
+ variable CGI alors que le second est la contrepartie appropriée
+ de REQUEST_URI (qui contient la valeur du champ <code>uri</code>
+ de la structure <code>request_rec</code>).</p>
+
+ <p>Si une substitution se produit et que la réécriture continue,
+ la valeur des deux variables sera mise à jour en conséquence.</p>
+
+ <p>Si elles sont utilisées dans un contexte global au serveur
+ (c’est-à-dire avant que la requête ne soit mise en parallèle
+ avec le système de fichiers), SCRIPT_FILENAME et
+ REQUEST_FILENAME ne peuvent pas contenir le chemin complet du
+ système de fichiers local, car le chemin est inconnu à ce
+ stade du traitement. Dans ce cas, les deux variables
+ contiendront initialement la valeur de REQUEST_URI. Pour obtenir
+ le chemin complet du système de fichiers local correspondant à
+ la requête, Utilisez une projection vers l’avant à base d’URL
+ <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la valeur
+ finale de REQUEST_FILENAME.</p>
+
<p>Parmi les variables
spécifiques à <module>mod_rewrite</module>, ou trouve les suivantes :</p>
@@ -728,6 +766,12 @@ la réécriture soit effectuée
<code>REQUEST_URI</code> a déjà été %-décodée ; pour la
recoder, passez-la à la <a href="#mapfunc">fonction de
mappage</a> "escape".
+ Notez que cette variable de serveur est distincte de la
+ variable d’environnement CGI de même nom : dans un contexte
+ CGI, <code>REQUEST_URI</code> contient l’URI original complet
+ de la requête, y compris la chaîne de paramètres. Voir la
+ directive <directive module="core">CGIVar</directive> pour les
+ détails.
</dd>
<dt><code>THE_REQUEST</code></dt>
@@ -740,71 +784,38 @@ la réécriture soit effectuée
différence de la plupart des variables suivantes.</dd>
</dl>
- </li>
- </ul>
+ <!-- Prefixed Variable Lookups -->
- <p>Si la <em>chaîne_de_test</em> contient la valeur spéciale
- <code>expr</code>, <em>expression_de_comparaison</em> sera traité
- en tant qu'expression rationnelle de type <a
- href="../expr.html">ap_expr</a>. Si des en-têtes HTTP sont
- référencés dans l'expression rationnelle, et si le drapeau
- <code>novary</code> n'est pas activé, ils seront ajoutés à
- l'en-tête Vary.</p>
+ <p><a id="rewritecond-prefixed" name="rewritecond-prefixed"
+ ></a><strong>Consultation de variables préfixées</strong></p>
+
+ <p>En plus des variables de serveur ci-avant, la syntaxe
+ <code>%{<em>PREFIX</em>:<em>name</em>}</code> permet d’accéder à des
+ ressources supplémentaires :</p>
- <p>Autres points à connaître ::</p>
- <ol>
- <li>
- <p>Les variables <code>SCRIPT_FILENAME</code> et
- <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
- du champ <code>filename</code> de la
- structure interne <code>request_rec</code>du serveur HTTP Apache.
- Le premier nom correspond au nom de variable bien connu CGI,
- alors que le second est l'équivalent de REQUEST_URI (qui
- contient la valeur du champ <code>uri</code> de
- <code>request_rec</code>).</p>
- <p>Si une substitution intervient et si la réécriture se
- poursuit, la valeur des deux variables sera mise à jour en
- conséquence.</p>
- <p>Dans le contexte du serveur principal (c'est à dire avant que
- la requête ne soit mise en correspondance avec le système de
- fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
- contenir le chemin entier dans le système de fichiers local car
- ce chemin b'est pas connu à ce stade du traitement. Dans ce cas,
- les deux variables contiendront la valeur de REQUEST_URI. Pour
- obtenir le chemin complet de la requête dans le système de
- fichiers local dans le contexte du serveur principal, utilisez une
- référence avant à base d'URL
- <code>%{LA-U:REQUEST_FILENAME}</code> pour déterminer la valeur
- finale de REQUEST_FILENAME.</p></li>
-
-
- <li>
- <code>%{ENV:<em>variable</em>}</code>, où <em>variable</em> peut
- correspondre à une variable d'environnement quelconque.</li>
- <li>
- <code>%{ENV:variable}</code> est aussi disponible, où
- <em>variable</em> peut correspondre à toute variable
- d'environnement. Peut être consulté via des structures internes
+ <dl>
+ <dt><strong><code>%{ENV:variable}</code></strong></dt>
+ <dd>Où <em>variable</em> peut correspondre à n’importe quelle variable
+ d’environnement. Peut être consulté via des structures internes
d'Apache httpd et (si on ne les trouve pas ici) via la fonction
<code>getenv()</code> à partir du processus du serveur Apache
- httpd.</li>
+ httpd.</dd>
- <li>Que <module>mod_ssl</module> soit chargé ou non, on peut
- utiliser <code>%{SSL:variable}</code>, où <em>variable</em>
- peut être remplacé par le nom d'une
- <a href="mod_ssl.html#envvars">variable
- d'environnement SSL</a> . Si <module>mod_ssl</module> n'est pas
- chargé, cette variable contiendra toujours une chaîne vide.
+ <dt><strong><code>%{SSL:variable}</code></strong></dt>
+ <dd>Où <em>variable</em> est le nom d’une <a
+ href="mod_ssl.html#envvars">variable d’environnement SSL</a>. Cette
+ variable peut être utilisée que <module>mod_ssl</module> soit chargé ou
+ non, mais elle sera toujours développée en une chaîne vide si
+ <module>mod_ssl</module> n’est pas chargé.
Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
contenir la valeur <code>128</code>. Ces variables sont
disponibles même si l'option <code>StdEnvVars</code> de la
directive <directive module="mod_ssl">SSLOptions</directive> n'a
- pas été définie.</li>
+ pas été définie.</dd>
- <li>
- On peut utiliser <code>%{HTTP:en-tête}</code>, où
- <em>en-tête</em> peut correspondre à tout nom d'en-tête MIME
- HTTP, pour extraire la valeur d'un en-tête envoyé dans la
+ <dt><strong><code>%{HTTP:header}</code></strong></dt>
+ <dd>Où <em>header</em> peut correspondre à n’importe quel nom d’en-tête
+ MIME HTTP. Cette variable peut toujours être utilisée pour obtenir la valeur d'un en-tête envoyé dans la
requête HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
contiendra la valeur de l'en-tête HTTP
"<code>Proxy-Connection:</code>".
@@ -818,104 +829,134 @@ la réécriture soit effectuée
logique de cout-circuit si le drapeau
'<strong><code>ornext|OR</code></strong>' est utilisé, et que de
ce fait, certaines d'entre elles ne seront pas évaluées.</p>
- </li>
+ </dd>
+ </dl>
- <li>A des fins de référence avant, on peut utiliser,
- <a id="LA-U" name="LA-U"><code>%{LA-U:variable}</code></a>, qui
- permet d'effectuer une sous-requête interne à base d'URL, afin
- de déterminer la valeur finale de <em>variable</em>. Ceci permet
- d'accéder à la valeur d'une variable pour la réécriture inconnue
- à ce stade du traitement, mais qui sera définie au
- cours d'une phase ultérieure.
- <p>Par exemple, pour effectuer une réécriture dépendant de la
- variable <code>REMOTE_USER</code> dans le contexte du serveur
- principal (fichier <code>httpd.conf</code>), vous devez utiliser
- <code>%{LA-U:REMOTE_USER}</code> - cette variable est définie
- par la phase d'autorisation qui intervient <em>après</em> la
- phase de traduction d'URL (pendant laquelle <module>mod_rewrite</module>
- opère).</p>
- <p>Par contre, comme <module>mod_rewrite</module> implémente son contexte de
- répertoire (fichier <code>.htaccess</code>) via la phase Fixup
- de l'API, et comme la phase d'autorisation intervient
- <em>avant</em> cette dernière, vous pouvez vous contenter
- d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
-
- <li>
- <code>%{LA-F:variable}</code> peut être utilisée pour effectuer
- une sous-requête interne (basée sur le nom de fichier), afin de
- déterminer la valeur finale de <em>variable</em>. La plupart du
- temps, elle est identique à LA-U (voir ci-dessus).</li>
- </ol>
+ <!-- Look-ahead Sub-requests -->
+
+ <p><a id="rewritecond-lookahead" name="rewritecond-lookahead"
+ ></a><strong>Sous-requêtes de projection vers l’avant</strong></p>
+
+ <p>Ces formes génèrent une sous-requête interne pour déterminer la valeur
+ finale d’une variable qui n’est pas encore disponible à ce stade du
+ traitement :</p>
+
+ <dl>
+ <dt><a id="LA-U" name="LA-U"><strong><code>%{LA-U:variable}</code></strong></a></dt>
+ <dd>Génère une sous-requête interne (à base d’URL) pour déterminer la
+ valeur finale de <em>variable</em>. Ceci permet d'accéder à la valeur
+ d'une variable pour la réécriture inconnue à ce stade du traitement,
+ mais qui sera définie au cours d'une phase ultérieure.
+ <p>Par exemple, pour effectuer une réécriture dépendant de la variable
+ <code>REMOTE_USER</code> dans le contexte du serveur principal (fichier
+ <code>httpd.conf</code>), vous devez utiliser
+ <code>%{LA-U:REMOTE_USER}</code> - cette variable est définie par la
+ phase d'autorisation qui intervient <em>après</em> la phase de
+ traduction d'URL (pendant laquelle <module>mod_rewrite</module>
+ opère).</p>
+ <p>Par contre, comme <module>mod_rewrite</module> implémente
+ son <glossary ref="perdirectory">contexte de répertoire</glossary>
+ (fichier <code>.htaccess</code>) via la phase Fixup de l'API, et comme
+ la phase d'autorisation intervient <em>avant</em> cette dernière, vous
+ pouvez vous contenter d'utiliser <code>%{REMOTE_USER}</code> dans ce
+ contexte.</p></dd>
+
+ <dt><strong><code>%{LA-F:variable}</code></strong></dt>
+ <dd>Génère une sous-requête interne (à base de nom de fichier) pour
+ déterminer la valeur finale de la <em>variable</em>. Identique la
+ plupart du temps à LA-U ci-dessus.</dd>
+ </dl>
+ <!-- Expression Syntax -->
- <p><em>expression_de_comparaison</em> est une expression
+ <p><a id="rewritecond-expr"
+ name="rewritecond-expr"></a><strong>Syntaxe des expressions</strong></p>
+
+ <p>Si la chaîne <em>TestString</em> contient la valeur spéciale
+ <code>expr</code>, le motif <em>CondPattern</em> sera traité comme une
+ expression <a href="../expr.html">ap_expr</a>. Les en-têtes HTTP
+ référencés dans l’expression seront ajoutés à l’en-tête Vary si le drapeau
+ <code>novary</code> n’a pas été spécifié.</p>
+
+ <!-- ============================================================ -->
+ <!-- CondPattern -->
+ <!-- ============================================================ -->
+
+ <p><a id="rewritecond-condpattern" name="rewritecond-condpattern"
+ ></a><strong>CondPattern</strong></p>
+
+
+ <p><em>CondPattern</em> est une expression
rationnelle qui est appliquée à l'instance actuelle de
- <em>chaîne_de_test</em>. <em>chaîne_de_test</em> est d'abord
+ <em>TestString</em>. <em>TestString</em> est d'abord
évaluée, puis comparée à
- l'<em>expression_de_comparaison</em>.</p>
+ l'<em>CondPattern</em>.</p>
- <p><em>expression_de_comparaison</em> est en général une
- <em>expression rationnelle compatible perl</em>, mais vous
+ <p><em>CondPattern</em> est en général une
+ <glossary ref="regex">expression rationnelle</glossary>, mais vous
disposez des syntaxes supplémentaires suivantes pour effectuer
- d'autres tests utiles sur <em>chaîne_de_test</em> :
+ d'autres tests utiles sur <em>TestString</em> :
</p>
- <ol>
- <li>Vous pouvez préfixer l'expression avec un caractère
+ <!-- Negation -->
+
+ <p>Vous pouvez préfixer l'expression avec un caractère
'<code>!</code>' (point d'exclamation) pour inverser le résultat
de la condition, quelle que soit l'<em>expression de
- comparaison</em> utilisée.</li>
+ comparaison</em> utilisée.</p>
+
+ <!-- String Comparisons -->
- <li>Vous pouvez effectuer des comparaisons lexicographiques de
- chaînes :
+ <p><a id="rewritecond-stringcomp" name="rewritecond-stringcomp"
+ ></a><strong>Comparaisons de chaînes</strong></p>
- <dl>
+ <dl>
<dt><strong><expression</strong></dt>
<dd>inférieur au sens lexicographique<br />
Traite l'<em>expression</em> comme une chaîne de
caractères et la compare lexicographiquement à
- <em>chaîne_de_test</em>. La condition est satisfaite si
- <em>chaîne_de_test</em> est inférieure au sens
+ <em>TestString</em>. La condition est satisfaite si
+ <em>TestString</em> est inférieure au sens
lexicographique à l'<em>expression</em>.</dd>
<dt><strong>>expression</strong></dt>
<dd>supérieur au sens lexicographique<br />
Traite l'<em>expression</em> comme une chaîne de
caractères et la compare lexicographiquement à
- <em>chaîne_de_test</em>. La condition est satisfaite si
- <em>chaîne_de_test</em> est supérieure au sens
+ <em>TestString</em>. La condition est satisfaite si
+ <em>TestString</em> est supérieure au sens
lexicographique à l'<em>expression</em>.</dd>
<dt><strong>=expression</strong></dt>
<dd>égal au sens lexicographique<br />
Traite l'<em>expression</em> comme une chaîne de
caractères et la compare lexicographiquement à
- <em>chaîne_de_test</em>. La condition est satisfaite si
- <em>chaîne_de_test</em> est égale au sens
+ <em>TestString</em>. La condition est satisfaite si
+ <em>TestString</em> est égale au sens
lexicographique à l'<em>expression</em> (les deux chaînes
sont exactement identiques, caractère pour caractère). Si
<em>expression</em> est <code>""</code> (deux guillemets),
- <em>chaîne_de_test</em> est comparée à la
+ <em>TestString</em> est comparée à la
chaîne vide.</dd>
<dt><strong><=expression de comparaison</strong></dt>
<dd>inférieur ou égal à au sens lexicographique<br />
- Considère l'<em>expression_de_comparaison</em> comme une
+ Considère la <em>CondPattern</em> comme une
chaîne de caractères et la compare au sens lexicographique à
- la <em>chaîne_de_test</em>. Vrai si <em>chaîne_de_test</em>
- précède lexicographiquement <em>expression_de_comparaison</em>, ou est
- égale à <em>expression_de_comparaison</em> (les deux chaînes
+ la <em>TestString</em>. Vrai si <em>TestString</em>
+ précède lexicographiquement <em>CondPattern</em>, ou est
+ égale à <em>CondPattern</em> (les deux chaînes
sont identiques, caractère pour caractère).</dd>
<dt><strong>>=expression de comparaison</strong></dt>
<dd>supérieur ou égal à au sens lexicographique<br />
- Considère l'<em>expression_de_comparaison</em> comme une
+ Considère la <em>CondPattern</em> comme une
chaîne de caractères et la compare au sens lexicographique à
- la <em>chaîne_de_test</em>. Vrai si <em>chaîne_de_test</em>
- suit lexicographiquement <em>expression_de_comparaison</em>, ou est
- égale à <em>expression_de_comparaison</em> (les deux chaînes
+ la <em>TestString</em>. Vrai si <em>TestString</em>
+ suit lexicographiquement <em>CondPattern</em>, ou est
+ égale à <em>CondPattern</em> (les deux chaînes
sont identiques, caractère pour caractère).</dd>
- </dl>
+ </dl>
<note><title>Note</title>
L'opérateur de comparaison de chaînes fait partie des arguments de la
<em>CondPattern</em> et doit par conséquent se trouver entre les
@@ -926,53 +967,54 @@ RewriteCond %{HTTP_USER_AGENT} "=This Ro
</highlight>
</note>
- </li>
+<!-- Integer Comparisons -->
+
+ <p><a id="rewritecond-intcomp" name="rewritecond-intcomp"
+ ></a><strong>Comparaisons d’entiers</strong></p>
- <li>
- Vous pouvez effectuer des comparaisons d'entiers :
- <dl>
+ <dl>
<dt><strong>-eq</strong></dt>
<dd>est numériquement égal à<br />
- La <em>chaîne_de_test</em> est considérée comme un entier,
+ <em>TestString</em> est considérée comme un entier,
et est comparée numériquement à l'<em>expression de
comparaison</em>. Vrai si les deux expressions sont
numériquement égales.</dd>
<dt><strong>-ge</strong></dt>
<dd>est numériquement supérieur ou égal à<br />
- La <em>chaîne_de_test</em> est considérée comme un entier,
+ <em>TestString</em> est considérée comme un entier,
et est comparée numériquement à l'<em>expression de
- comparaison</em>. Vrai si <em>chaîne_de_test</em> est
+ comparaison</em>. Vrai si <em>TestString</em> est
numériquement supérieure ou égale à
- <em>expression_de_comparaison</em>.</dd>
+ <em>CondPattern</em>.</dd>
<dt><strong>-gt</strong></dt>
<dd>est numériquement supérieur à<br />
- La <em>chaîne_de_test</em> est considérée comme un entier,
+ <em>TestString</em> est considérée comme un entier,
et est comparée numériquement à l'<em>expression de
- comparaison</em>. Vrai si <em>chaîne_de_test</em> est
+ comparaison</em>. Vrai si <em>TestString</em> est
numériquement
- supérieure à <em>expression_de_comparaison</em>.</dd>
+ supérieure à <em>CondPattern</em>.</dd>
<dt><strong>-le</strong></dt>
<dd>est numériquement inférieur ou égal à<br />
- La <em>chaîne_de_test</em> est considérée comme un entier,
+ <em>TestString</em> est considérée comme un entier,
et est comparée numériquement à l'<em>expression de
- comparaison</em>. Vrai si <em>chaîne_de_test</em> est
+ comparaison</em>. Vrai si <em>TestString</em> est
numériquement
- inférieure ou égale à <em>expression_de_comparaison</em>.
+ inférieure ou égale à <em>CondPattern</em>.
Attention à la confusion avec le drapeau <strong>-l</strong>
en utilisant la variante the <strong>-L</strong> ou
<strong>-h</strong>.</dd>
<dt><strong>-lt</strong></dt>
<dd>est numériquement inférieur à<br />
- La <em>chaîne_de_test</em> est considérée comme un entier,
+ <em>TestString</em> est considérée comme un entier,
et est comparée numériquement à l'<em>expression de
- comparaison</em>. Vrai si <em>chaîne_de_test</em> est
+ comparaison</em>. Vrai si <em>TestString</em> est
numériquement
- inférieure à <em>expression_de_comparaison</em>.
+ inférieure à <em>CondPattern</em>.
Attention à la confusion avec le drapeau <strong>-l</strong>
en utilisant la variante the <strong>-L</strong> ou
<strong>-h</strong>.</dd>
@@ -984,39 +1026,43 @@ RewriteCond %{HTTP_USER_AGENT} "=This Ro
si les deux éléments comparés sont numériquement différents.
Equivalent à <code>!-eq</code>.</dd>
- </dl>
- </li>
-
- <li>Vous pouvez effectuer différents tests sur les attributs de
- fichier :
- <dl>
+ </dl>
+
+ <!-- File Attribute Tests -->
+ <p><a id="rewritecond-fileattr" name="rewritecond-fileattr"
+ ></a><strong>Tests des attributs de fichier</strong></p>
+
+ <dl>
<dt><strong>-d</strong></dt>
<dd>est un <strong>r</strong>épertoire<br />
- Traite <em>chaîne_de_test</em> comme un chemin et vérifie
+ Traite <em>TestString</em> comme un chemin et vérifie
s'il existe ou pas, et s'il s'agit d'un répertoire.</dd>
<dt><strong>-f</strong></dt>
<dd>est un <strong>f</strong>ichier régulier<br />
- Traite <em>chaîne_de_test</em> comme un chemin et vérifie
- s'il existe ou pas, et s'il s'agit d'un fichier régulier.</dd>
+ Traite <em>TestString</em> comme un chemin et vérifie
+ s'il existe ou pas, et s'il s'agit d'un fichier régulier.
+ </dd>
<dt><strong>-F</strong></dt>
<dd>test de l'existence d'un fichier via une sous-requête<br />
- Vérifie si <em>chaîne_de_test</em> est un fichier valide,
+ Vérifie si <em>TestString</em> est un fichier valide,
accessible à travers tous les contrôles d'accès du serveur
actuellement configurés pour ce chemin. C'est une
sous-requête interne qui effectue cette vérification - à
utiliser avec précautions car les performances du serveur
- peuvent s'en trouver affectées !</dd>
+ peuvent s'en trouver affectées !
+ </dd>
<dt><strong>-h</strong></dt>
<dd>est un lien symbolique, selon la convention bash<br />
- Voir <strong>-l</strong>.</dd>
+ Voir <strong>-l</strong>.
+ </dd>
<dt><strong>-l</strong></dt>
<dd>est un <strong>l</strong>ien symbolique<br />
- Considère la <em>chaîne_de_test</em> comme un chemin et
+ Considère la <em>TestString</em> comme un chemin et
vérifie son existence et si elle est un lien symbolique. On
peut aussi utiliser la convention bash <strong>-L</strong>
ou <strong>-h</strong> lorsqu'il y a risque de confusion
@@ -1028,14 +1074,14 @@ RewriteCond %{HTTP_USER_AGENT} "=This Ro
<dt><strong>-s</strong></dt>
<dd>est un fichier régulier d'une certaine taille<br />
- Considère la <em>chaîne_de_test</em> comme un chemin et
+ Considère la <em>TestString</em> comme un chemin et
vérifie son existence et si elle est un fichier régulier
d'une taille supérieure à zéro.</dd>
<dt><strong>-U</strong></dt>
<dd><p>test de l'existence d'une
URL via une sous-requête<br />
- Vérifie si <em>chaîne_de_test</em> est une URL valide,
+ Vérifie si <em>TestString</em> est une URL valide,
accessible à travers tous les contrôles d'accès du serveur
actuellement configurés pour ce chemin. C'est une
sous-requête interne qui effectue cette vérification - à
@@ -1050,24 +1096,26 @@ RewriteCond %{HTTP_USER_AGENT} "=This Ro
<dt><strong>-x</strong></dt>
<dd>a l'attribut d'exécution positionné<br />
- Considère la <em>chaîne_de_test</em> comme un chemin et
+ Considère la <em>TestString</em> comme un chemin et
vérifie son existence et si elle a son attribut d'exécution
positionné. Ce positionnement est déterminé en fonction de
l'OS sous-jacent.</dd>
- </dl>
+ </dl>
- Par exemple:
+ <p>Par exemple :</p>
<highlight language="config">
RewriteCond /var/www/%{REQUEST_URI} !-f
RewriteRule ^(.+) /other/archive/$1 [R]
</highlight>
- </li>
+ <!-- Expression Evaluation in CondPattern -->
- <li>
- <p>Si la <em>chaîne_de_test</em> contient la valeur spéciale
+ <p><a id="rewritecond-expr-pattern" name="rewritecond-expr-pattern"
+ ></a><strong>Évaluation des expressions</strong></p>
+
+ <p>Si <em>TestString</em> contient la valeur spéciale
<code>expr</code>, la <em>chaîne de comparaison</em> sera
traitée en tant qu'expression rationnelle de type <a
href="../expr.html">ap_expr</a>.</p>
@@ -1083,31 +1131,35 @@ RewriteRule ^(.+) /other/archive/$1 [R]
RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
RewriteRule "^/images" "-" [F]
</highlight>
- </li>
- </ol>
+ <!-- ============================================================ -->
+ <!-- Flags -->
+ <!-- ============================================================ -->
+
+ <p><a id="rewritecond-flags" name="rewritecond-flags"
+ ></a><strong>Drapeaux</strong></p>
<p>Vous pouvez aussi définir certains drapeaux pour
- l'<em>expression_de_comparaison</em> en ajoutant ces
- <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
+ la <em>CondPattern</em> en ajoutant ces
+ <strong><code>[</code><em>flags</em><code>]</code></strong>
comme troisième argument de la directive
- <directive>RewriteCond</directive>, où <em>drapeaux</em> est un
+ <directive>RewriteCond</directive>, où <em>flags</em> est un
sous-ensemble séparé par des virgules des drapeaux suivants :</p>
- <ul>
- <li>'<strong><code>nocase|NC</code></strong>'
- (<strong>n</strong>o <strong>c</strong>ase)<br />
+ <dl>
+ <dt>'<strong><code>nocase|NC</code></strong>'</dt>
+ <dd>(<strong>n</strong>o <strong>c</strong>ase)<br />
Rend le test insensible à la casse - il n'est pas fait de
distinction entre majuscules et minuscules, à la fois dans le
- développement de <em>chaîne_de_test</em> et dans
- <em>expression_de_comparaison</em>. Ce drapeau n'est pris en
- compte que lors d'une comparaison entre <em>chaîne_de_test</em>
- et <em>expression_de_comparaison</em>. Il ne l'est pas pour les
+ développement de <em>TestString</em> et dans
+ <em>CondPattern</em>. Ce drapeau n'est pris en
+ compte que lors d'une comparaison entre <em>TestString</em>
+ et <em>CondPattern</em>. Il ne l'est pas pour les
vérification par sous-requêtes ou sur le système de
- fichiers.</li>
+ fichiers.
+ </dd>
- <li>
- '<strong><code>ornext|OR</code></strong>'
- (<strong>ou</strong> condition suivante)<br />
+ <dt>'<strong><code>ornext|OR</code></strong>'</dt>
+ <dd>(<strong>or</strong> condition suivante)<br />
Permet de chaîner les conditions de règles avec un OU au
lieu du AND implicite. Exemple typique :
@@ -1120,10 +1172,10 @@ RewriteRule ...règles concernant tous c
Sans ce drapeau, les paires
condition/règle devraient être écrites trois fois.
- </li>
+ </dd>
- <li>'<strong><code>novary|NV</code></strong>'
- (<strong>n</strong>o <strong>v</strong>ary)<br />
+ <dt>'<strong><code>novary|NV</code></strong>'</dt>
+ <dd>(<strong>n</strong>o <strong>v</strong>ary)<br />
Si la condition contient un en-tête HTTP, ce drapeau empêche
ce dernier d'être ajouté à l'en-tête Vary de la réponse. <br />
L'utilisation de ce drapeau peut provoquer une mise en cache
@@ -1131,11 +1183,15 @@ RewriteRule ...règles concernant tous c
varie avec la valeur de l'en-tête considéré. Ce drapeau ne
devrait donc être utilisé que si l'on maîtrise parfaitement le
fonctionnement de l'en-tête Vary.
- </li>
- </ul>
+ </dd>
+ </dl>
+ <!-- ============================================================ -->
+ <!-- Example -->
+ <!-- ============================================================ -->
- <p><strong>Exemple :</strong></p>
+ <p><a id="rewritecond-examples" name="rewritecond-examples"
+ ></a><strong>Exemple</strong></p>
<p>Pour réécrire la page d'accueil d'un site en fonction de
l'en-tête ``<code>User-Agent:</code>'' de la requête, vous
@@ -1162,7 +1218,7 @@ RewriteRule "^/$" "/hom
l'absence d'un opérateur logique <strong><code>OU</code></strong>,
l'ensemble du jeu de règles est abandonné et les conditions restantes ne
sont pas évaluées.
- </p>
+ </p>
</usage>
@@ -1172,7 +1228,7 @@ RewriteRule "^/$" "/hom
<name>RewriteRule</name>
<description>Définit les règles pour le moteur de réécriture</description>
<syntax>RewriteRule
- <em>Modèle</em> <em>Substitution</em> [<em>drapeaux</em>]</syntax>
+ [!]<em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
@@ -1186,10 +1242,14 @@ RewriteRule "^/$" "/hom
les règles seront appliquées au cours du processus de
réécriture.</p>
- <p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
- <a id="regexp" name="regexp">expression rationnelle</a>
- compatible perl. Ce avec quoi ce modèle est comparé dépend de l'endroit où
- la directive <directive>RewriteRule</directive> est définie.</p>
+ <p><a id="patterns" name="patterns"><em>Pattern</em></a> est une <a
+ id="regexp" name="regexp"><glossary ref="regex">expression
+ rationnelle</glossary></a>. Ce avec quoi ce modèle est comparé dépend de
+ l'endroit où la directive <directive>RewriteRule</directive> est
+ définie.</p>
+
+ <p>Si le motif est précédé d’un <code>!</code>, la substitution ne sera
+ effectuée que si le <em>pattern</em> ne correspond pas.</p>
<note><title><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est comparé ?</a></title>
@@ -1201,18 +1261,20 @@ RewriteRule "^/$" "/hom
exemple "/app1/index.html"). Il s'agit du <a
href="directive-dict.html#Syntax">URL-path</a> décodé de sa valeur "%xx".</p></li>
- <li><p>Dans un contexte de répertoire (sections <directive
+ <li><p>Dans un <glossary ref="perdirectory">contexte de
+ répertoire</glossary> (sections <directive
module="core">Directory</directive> et fichiers .htaccess), le
- <em>Modèle</em> est comparé avec une partie de chemin ; par exemple une
+ <em>Pattern</em> est comparé avec une partie de chemin ; par exemple une
requête pour "/app1/index.html" entraînera une comparaison avec
- "app1/index.html" ou "index.html" selon l'endroit où la directive
- <directive>RewriteRule</directive> est définie.</p>
+ "app1/index.html" ou "index.html" selon le chemin de répertoire où la
+ directive <directive>RewriteRule</directive> est définie.</p>
- <p>Le chemin où la règle est défini est supprimé du chemin correspondant
- du système de fichiers avant comparaison (jusqu'au slash final compris).
- En conséquence de cette suppression, les règles définies dans
- ce contexte n'effectuent des comparaisons qu'avec la portion du chemin
- du système de fichiers "en dessous" de l'endroit où la règle est définie.</p>
+ <p>Le chemin de répertoire auquel la règle s’applique est supprimé du
+ chemin correspondant du système de fichiers avant comparaison (jusqu'au
+ slash final compris). En conséquence de cette suppression, les règles
+ définies dans ce contexte n'effectuent des comparaisons qu'avec la portion
+ du chemin du système de fichiers "en dessous" du chemin de répertoire
+ auquel la règle s’applique.</p>
<p>Le chemin correspondant actuel du système de fichiers est déterminé par
des directives telles que <directive module="core">DocumentRoot</directive> et
@@ -1231,7 +1293,7 @@ RewriteRule "^/$" "/hom
</note>
-<note><title>Réécritures dans un contexte de répertoire</title>
+<note><title>Réécritures dans un <glossary ref="perdirectory">contexte de répertoire</glossary></title>
<ul>
<li>L'utilisation du moteur de réécriture dans les
fichiers <a href="../howto/htaccess.html">.htaccess</a> et les sections
@@ -1239,28 +1301,30 @@ fichiers <a href="../howto/htaccess.html
type="section" module="core">Directory</directive> est un peu plus
complexe.</li>
-<li>Pour activer le moteur de réécriture dans ces contextes, vous devez
-définir "<code>RewriteEngine On</code>" <strong>et</strong>
-"<code>Options FollowSymLinks</code>". Si l'administrateur a désactivé
-la possibilité de modifier l'option <code>FollowSymLinks</code> au
-niveau du répertoire d'un utilisateur, vous ne pouvez pas utiliser le
-moteur de réécriture. Cette restriction a été instaurée à des fins de
-sécurité.</li>
+<li>Pour activer le moteur de réécriture dans ces contextes, vous devez définir
+<code>RewriteEngine On</code> <strong>et</strong> au moins une des <directive
+module="core">Options</directive> <code>FollowSymLinks</code> ou
+<code>SymLinksIfOwnerMatch</code> doit être activée. Notez que ces options ne
+peuvent être définies dans un fichier de configuration distribué
+(<code>.htaccess</code>) que si une directive <directive
+module="core">AllowOverride</directive> le permet dans la configuration du
+serveur.</li>
<li>Voir la directive
<directive module="mod_rewrite">RewriteBase</directive> pour plus de détails à
propos de l'ajout du préfixe après les substitutions relatives.</li>
<li>Si vous souhaitez effectuer une comparaison en prenant en compte
-l'intégralité du
-chemin de l'URL dans un contexte de répertoire (htaccess), vous devez
-utiliser la variable <code>%{REQUEST_URI}</code> dans la directive
-<directive module="mod_rewrite">RewriteCond</directive>.</li>
-
-<li>Le prefixe supprimé se termine toujours par un slash, ce qui
-signifie que la comparaison s'effectue avec une chaîne qui ne comporte
-<em>jamais</em> de slash de début. Ainsi, un <em>modèle</em> contenant
-<code>^/</code> ne correspondra jamais dans un contexte de répertoire.</li>
+l'intégralité du chemin de l'URL dans un <glossary ref="perdirectory">contexte
+de répertoire</glossary> (htaccess), vous devez utiliser la variable
+<code>%{REQUEST_URI}</code> dans la directive <directive
+module="mod_rewrite">RewriteCond</directive>.</li>
+
+<li>Le prefixe supprimé se termine toujours par un slash, ce qui signifie que la
+comparaison s'effectue avec une chaîne qui ne comporte <em>jamais</em> de slash
+de début. Ainsi, un <em>modèle</em> contenant <code>^/</code> ne correspondra
+jamais dans un <glossary ref="perdirectory">contexte de
+répertoire</glossary>.</li>
<li>Bien que les règles de réécriture soient permises du point de vue de
la syntaxe dans les sections <directive type="section"
@@ -1286,9 +1350,9 @@ d'imbrication dans la configuration. Dan
règle RewriteRules définie dans le second bloc <directive
module="core">If</directive> est prise en compte car celle définie dans le
premier bloc est écrasée. Définir <directive
-module="mod_rewrite">RewriteOptions</directive> Inherit force mod_rewrite à
-combiner les deux sections en prenant en compte les deux règles et pas seulement
-la dernière.</li>
+module="mod_rewrite">RewriteOptions</directive> Inherit force mod_rewrite à combiner
+les deux sections en prenant en compte les deux règles et pas seulement la
+dernière.</li>
</ul>
<example>
<highlight language="config">
@@ -1305,66 +1369,40 @@ la dernière.</li>
</example>
</note>
- <p>Pour quelques conseils à propos des <glossary
- ref="regex">expressions rationnelles</glossary>, voir le
- document <a
- href="../rewrite/intro.html#regex">Introduction à
- mod_rewrite</a>.</p>
-
- <p>Dans <module>mod_rewrite</module>, on peut aussi utiliser le caractère
- NOT ('<code>!</code>') comme préfixe de modèle. Ceci vous permet
- d'inverser la signification d'un modèle, soit pour dire
- ``<em>si l'URL considérée ne correspond <strong>PAS</strong> à
- ce modèle</em>''. Le caractère NON peut donc être utilisé à
- titre exceptionnel, lorsqu'il est plus simple d'effectuer une
- comparaison avec le modèle inversé, ou dans la dernière règle
- par défaut.</p>
-
-<note><title>Note</title>
-Si vous utilisez le caractère NON pour inverser la signification d'un
-modèle, vous ne pouvez pas inclure de parties génériques groupées dans
-le modèle. Ceci est dû au fait que, lorsque le modèle ne correspond
-pas (autrement dit, sa négation correspond), les groupes sont vides.
-Ainsi, si vous utilisez des modèles inversés, vous ne pouvez
-pas vous référer aux groupes par <code>$N</code> dans la chaîne de
-substitution !
-</note>
-
- <p>Dans une règle de réécriture,
- <a id="rhs" name="rhs"><em>Substitution</em></a> est la chaîne
- de caractères qui remplace le chemin de l'URL original qui
- correspondait au <em>Modèle</em>. <em>Substitution</em> peut
- être :</p>
+ <p>Pour des informations à propos des <glossary ref="regex">expressions
+ rationnelles</glossary>, y compris l’utilisation du préfixe <code>!</code>
+ pour inverser un motif, voir la section <a
+ href="../rewrite/intro.html#regex">Expressions rationnelles</a> de
+ l’introduction à mod_rewrite.</p>
+
+ <p>Dans une règle de réécriture, <a id="rhs"
+ name="rhs"><em>Substitution</em></a> est la chaîne de caractères qui
+ remplace le chemin de l'URL (voir <a href="#what_is_matched">"Qu’est-ce
+ qui est comparé ?"</a> ci-avant) lorsque les conditions de la règle sont
+ satisfaites. <em>Substitution</em> peut être :</p>
<dl>
<dt>un chemin du système de fichiers</dt>
- <dd>Il indique alors la localisation dans le système de
- fichiers de la ressource qui doit être envoyée au
- client. Les substitutions ne sont traitées en tant que chemins du
- système de fichiers que si la règle est configurée dans un
- contexte de serveur (serveur virtuel), et si le premier
- composant du chemin dans la substitution existe dans le système
- de fichiers.</dd>
+ <dd>Il indique alors la localisation dans le système de fichiers de la
+ ressource qui doit être envoyée au client. Une substitution commençant
+ par <code>/</code> n’est traitée comme un chemin du système de fichiers
+ que dans un contexte de serveur virtuel ou de serveur global, et
+ seulement si le premier composant du chemin existe dans le système de
+ fichiers. Dans un <glossary ref="perdirectory">contexte de
+ répertoire</glossary>, la question ne se pose pas.</dd>
<dt>chemin d'URL</dt>
<dd>Un chemin relatif à la valeur de <directive
module="core">DocumentRoot</directive> vers la ressource qui
- doit être servie. Notez que <module>mod_rewrite</module>
- essaie de deviner si vous avez spécifié un chemin du système
- de fichiers ou un chemin d'URL en vérifiant si la première
- partie du chemin existe à la racine du système de fichiers.
- Par exemple, si vous avez spécifié comme chaîne de
- <em>Substitution</em> <code>/www/file.html</code>, cette
- dernière sera traitée comme un chemin d'URL <em>à moins</em>
- qu'un répertoire nommé <code>www</code> n'existe à la racine
- de votre système de fichiers (ou dans le cas d'une
- réécriture au sein d'un fichier <code>.htaccess</code>,
- relativement à la racine des documents), auquel cas la chaîne de
- substitution sera traitée comme un chemin du système de
- fichiers. Si vous désirez que d'autres directives de
+ doit être servie. Dans un contexte de serveur virtuel ou de serveur
+ global, si le premier composant du chemin existe à la racine du système
+ de fichiers, la substitution est traitée comme un chemin du système de
+ fichiers. Par exemple, <code>/www/file.html</code> est un chemin d’URL,
+ sauf si un répertoire nommé <code>www</code> existe à la racine du
+ système de fichiers. Si vous désirez que d'autres directives de
correspondance d'URL (comme la directive <directive
module="mod_alias">Alias</directive>) soient appliquées au
chemin d'URL résultant, utilisez le drapeau <code>[PT]</code>
@@ -1393,6 +1431,32 @@ substitution !
</dl>
+ <note><title>Comment sont interprétées les substitutions de chemin</title>
+ <p>En fonction du contexte et si elle commence ou non par un slash, une
+ substitution sera traitée comme un chemin du système de fichiers ou comme
+ un chemin d’URL :</p>
+ <ul>
+ <li><strong>Commence par un <code>/</code>, contexte de serveur virtuel
+ ou de serveur global :</strong>
+ Traitée comme un chemin du système de fichiers si le premier composant du
+ chemin existe sur disque ; sinon, traitée comme un chemin d’URL.</li>
+ <li><strong>Commence par un <code>/</code>, <glossary
+ ref="perdirectory">contexte de répertoire</glossary> :</strong>
+ Toujours traitée comme un chemin d’URL. Pas de vérification sur le
+ système de fichiers.</li>
+ <li><strong>Ne commence pas par un <code>/</code> (chemin relatif), contexte de serveur virtuel
+ ou de serveur global :</strong> Traitée comme un chemin d’URL relatif à
+ l’URI de la requête actuelle.</li>
+ <li><strong>Ne commence pas par un <code>/</code> (chemin relatif),
+ <glossary ref="perdirectory">contexte de
+ répertoire</glossary> :</strong> Traitée comme un chemin d’URL relatif
+ au chemin de répertoire auquel la directive <directive
+ module="core">Directory</directive> ou le fichier <code>.htaccess</code>
+ s’appliquent. Voir <directive>RewriteBase</directive> pour le contrôle
+ du préfixe ajouté aux substitutions relatives.</li>
+ </ul>
+ </note>
+
<p>En plus du texte, la chaîne <em>Substitution</em> peut
comporter :</p>
@@ -1407,20 +1471,27 @@ substitution !
condition d'une règle (<code>%{VARNAME}</code>)</li>
<li>des appels de
- <a href="#mapfunc">fonctions de comparaison</a>
+ <a href="#mapfunc">fonctions de mappage</a>
(<code>${nom correspondance:clé|défaut}</code>)</li>
</ol>
<p>Les références arrières sont des identificateurs de la forme
- <code>$</code><strong>N</strong> (<strong>N</strong>=0..9), qui
- seront remplacés par le contenu du <strong>N</strong>ème groupe
- du <em>Modèle</em> qui correspondait. Les variables du serveur
- sont les mêmes que dans la <em>Chaîne_de_test</em> d'une
- directive <directive module="mod_rewrite">RewriteCond</directive>. Les
- fonctions de comparaison sont issues de la directive <directive
- module="mod_rewrite">RewriteMap</directive> dans la
- section de laquelle elles sont décrites. Ces trois types de
- variables sont évaluées dans l'ordre ci-dessus.</p>
+ <code>$</code><strong>N</strong> (<strong>N</strong>=0..9).
+ <code>$0</code> correspond à la chaîne entière correspondant au
+ <em>motif</em>, alors que <code>$1</code>..<code>$9</code> correspondent
+ aux groupes correspondants capturés depuis le <em>motif</em>
+ correspondant. De même, les références arrières
+ <code>%0</code>..<code>%9</code> correspondent aux <em>motifs de condition
+ </em> de <directive module="mod_rewrite">RewriteCond</directive>
+ correspondants les plus récents : <code>%0</code> représente une
+ correspondance complète et <code>%1</code>..<code>%9</code> les groupes
+ capturés. Les variables du serveur sont les mêmes que dans la
+ <em>Chaîne_de_test</em> d'une directive <directive
+ module="mod_rewrite">RewriteCond</directive>. Les fonctions de comparaison
+ sont issues de la directive <directive
+ module="mod_rewrite">RewriteMap</directive> dans la section de laquelle
+ elles sont décrites. Ces trois types de variables sont évaluées dans
+ l'ordre ci-dessus.</p>
<p>Chaque règle de réécriture s'applique au résultat de la règle
précédente, selon l'ordre dans lequel elles ont été définies dans
@@ -1453,10 +1524,10 @@ substitution !
<p>En outre, vous pouvez spécifier des <a name="rewriteflags"
id="rewriteflags">actions</a> spéciales à effectuer en ajoutant
des
- <strong><code>[</code><em>drapeaux</em><code>]</code></strong>
+ <strong><code>[</code><em>flags</em><code>]</code></strong>
comme troisième argument de la directive
<directive>RewriteRule</directive>. Séparés par des virgules au sein d'une
- liste encadrée par des crochets, les <em>drapeaux</em> peuvent
+ liste encadrée par des crochets, les <em>flags</em> peuvent
être choisis dans la table suivante. Vous trouverez plus de
détails, et des exemples pour chaque drapeau dans le <a
href="../rewrite/flags.html">document à propos des drapeaux de
@@ -1468,7 +1539,7 @@ substitution !
</tr>
<tr>
<td>B</td>
- <td>Echappe les caractères non-alphanumériques dans les références
+ <td>Echappe les caractères non-alphanumériques dans les références
arrières <em>avant</em> d'appliquer la transformation. Pour un
échappement similaire des variables du serveur, voir la <a
href="#mapfunc">fonction de mappage</a> "escape".<em><a
@@ -1518,11 +1589,11 @@ substitution !
</tr>
<tr>
<td>END</td>
- <td>Stoppe le processus de réécriture immédiatement et
- n'applique plus aucune règle. Empêche aussi l'application
- ultérieure de règles de réécriture dans les contextes de
- répertoire et de fichier .htaccess (disponible à partir de la
- version 2.3.9 du serveur HTTP Apache). <em><a
+ <td>Stoppe le processus de réécriture immédiatement et n'applique plus
+ aucune règle. Empêche aussi l'application ultérieure de règles de
+ réécriture dans les contextes de <glossary
+ ref="perdirectory">répertoire</glossary> et de fichier .htaccess
+ (disponible à partir de la version 2.3.9 du serveur HTTP Apache). <em><a
href="../rewrite/flags.html#flag_end">détails ...</a></em></td>
</tr>
<tr>
@@ -1550,11 +1621,11 @@ substitution !
</tr>
<tr>
<td>last|L</td>
- <td>Arrête le processus de réécriture immédiatement et n'applique
- plus aucune règle. Prêtez une attention particulière aux mises
- en garde concernant les contextes de niveau répertoire et
- .htaccess (voir aussi le drapeau END). <em><a
- href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
+ <td>Arrête le processus de réécriture immédiatement et n'applique plus
+ aucune règle. Prêtez une attention particulière aux mises en garde
+ concernant les contextes de niveau <glossary
+ ref="perdirectory">répertoire</glossary> (voir aussi le drapeau END).
+ <em><a href="../rewrite/flags.html#flag_l">détails ...</a></em></td>
</tr>
<tr>
<td>next|N</td>
@@ -1640,7 +1711,7 @@ substitution !
</tr>
<tr>
<td>UnsafeAllow3F</td>
- <td>Autorise les substitutions à partir d'URL potentiellement non
+ <td>Autorise les substitutions à partir d’URL potentiellement non
fiables.
<em><a href="../rewrite/flags.html#flag_unsafe_allow_3f">détails ...</a></em>
</td>
@@ -1648,7 +1719,7 @@ substitution !
<tr>
<td>UnsafePrefixStat</td>
<td>Autorise les substitutions potentiellement non fiables à partir
- d'une variable de tête ou d'une référence arrière vers un chemin du
+ d’une variable de tête ou d’une référence arrière vers un chemin du
système de fichiers.
<em><a href="../rewrite/flags.html#flag_unsafe_prefix_stat">détails ...</a></em><br />
<since>2.4.60</since>
@@ -1659,8 +1730,8 @@ substitution !
<td>
Empêche la fusion des slashes de début multiples tels que ceux utilisés
dans les chemins UNC de Windows.
- <em><a href="../rewrite/flags.html#flag_unc">détails ...</a></em><br />
- <since>2.4.62</since>
+ <em><a href="../rewrite/flags.html#flag_unc">details ...</a></em><br />
+ <since>2.4.62</since>
</td>
</tr>
</table>
@@ -1678,11 +1749,9 @@ utilisé dans la directive <directive mo
<p>Voici toutes les combinaisons de substitution et leurs
significations :</p>
- <p><strong>Dans la configuration au niveau du serveur principal
- (<code>httpd.conf</code>)<br />
- pour la requête ``<code>GET
- /chemin/infochemin</code>'':</strong><br />
- </p>
+ <p><strong>En dehors de la configuration au niveau du <glossary
+ ref="perdirectory">répertoire</glossary> pour la requête ``<code>GET
+ /chemin/infochemin</code>'':</strong><br /> </p>
<table border="1" style="zebra">
<tr>
@@ -1752,13 +1821,11 @@ redondant)</td>
</tr>
</table>
- <p><strong>Dans une configuration de niveau répertoire pour
- <code>/chemin</code><br />
- (<code>/chemin/physique/vers/chemin/.htacccess</code>, avec
- <code>RewriteBase "/chemin"</code>)<br />
- pour la requête ``<code>GET
- /chemin/chemin-local/infochemin</code>'':</strong><br />
- </p>
+ <p><strong>Dans une configuration de niveau <glossary
+ ref="perdirectory">répertoire</glossary> pour <code>/chemin</code><br />
+ (par exemple, <code>.htaccess</code> ou <code><Directory></code>,
+ avec <code>RewriteBase "/chemin"</code>)<br /> pour la requête ``<code>GET
+ /chemin/chemin-local/infochemin</code>'':</strong><br /> </p>
<table border="1" style="zebra">