<?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: 1932387:1934137 (outdated) -->
+<!-- English Revision: 1934137 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
(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,
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
+
+ <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, de cookies, d'en-têtes HTTP, ou de repères
+ temporels.</p>
+ <p><module>mod_rewrite</module> agit sur la totalité de l'URL, ou de toute
+ partie de cette dernière, y compris PATH_INFO ou QUERY_STRING.</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>. 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 échappées et dans ce cas, les guillemets simples
- ou doubles sont équivalents.</p>
-
- <p>Vous trouverez plus de détails, discussions et exemples
- dans la
- <a href="../rewrite/">documentation détaillée
- sur mod_rewrite</a>.</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>
<section id="logging"><title>Journalisation</title>
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>
<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
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
<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>
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
<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>
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>
+ <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></li>
<li>
<code>%{LA-F:variable}</code> peut être utilisée pour effectuer
l'<em>expression_de_comparaison</em>.</p>
<p><em>expression_de_comparaison</em> est en général une
- <em>expression rationnelle compatible perl</em>, mais vous
+ <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> :
</p>
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>Modèle</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>
<note><title><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est comparé ?</a></title>
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
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
</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
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>
+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 contexte de répertoire.</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"
<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>
</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>
</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
</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>
</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>
<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>
</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">