<?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: 1734260 -->
+<!-- English Revision: 1780210 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
<example><title>Exemple</title>
<highlight language="config">
- LogLevel alert rewrite:trace3
- </highlight>
+LogLevel alert rewrite:trace3
+ </highlight>
</example>
<note><title>RewriteLog</title>
hôte virtuel pour lequel vous souhaitez utiliser des règles
de réécriture.</p>
- <p>Les directives <directive>RewriteMap</directive> du type
+ <p>Les directives <directive module="mod_rewrite">RewriteMap</directive> du type
<code>prg</code> ne sont pas prises en compte au cours de
l'initialisation du serveur si elle ont été définies dans un
contexte où la directive <directive>RewriteEngine</directive> n'a
d'URL et du contexte du système de fichiers pour transformer la
sustitution relative en URL. Par exemple, les modules
<module>mod_userdir</module> et <module>mod_alias</module>
- utilisent ces informations de contexte étendu.</p>
+ utilisent ces informations de contexte étendu. Disponible à partir de la
+ version 2.4.16 du serveur HTTP Apache.</p>
+ </dd>
+
+ <dt><code>LegacyPrefixDocRoot</code></dt>
+ <dd>
+
+ <p>Avant la version 2.4.26, si une substitution était une URL absolue qui
+ correspondait au serveur virtuel courant, l'URL pouvait être tout d'abord
+ réduite à sa partie chemin, puis enfin en chemin local. Comme l'URL peut
+ être réduite en chemin local, le chemin doit être préfixé par la
+ valeur de la directive DocumentRoot, ce qui permet d'interdire l'accès à
+ un fichier tel que /tmp/myfile suite à une requête pour
+ http://host/file/myfile avec la <directive
+ module="mod_rewrite">RewriteRule</directive> suivante :</p>
+ <highlight language="config">
+ RewriteRule /file/(.*) http://localhost/tmp/$1
+ </highlight>
+ <p>Cette option permet de restaurer l'ancien comportement lorsqu'un chemin
+ local obtenu à partir de la réduction d'une URL n'est pas préfixé par la
+ valeur de la directive DocumentRoot. Disponible à partir de la version
+ 2.4.26 du serveur HTTP Apache.</p>
</dd>
</dl>
<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>RewriteRule</directive> qui réécrivent vers un chemin
+ <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
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>RewriteRule</directive>, suffixé par
+ 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>A partir de la version 2.4.11 du serveur HTTP Apache,
+ <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
<directive module="mod_alias">Alias</directive> ou le module
la réécriture soit effectuée
</description>
<syntax> RewriteCond
- <em>chaîne_de_test</em> <em>expression_de_comparaison</em></syntax>
+ <em>chaîne_de_test</em> <em>expression_de_comparaison</em> [<em>drapeaux</em>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
en utilisant la variante the <strong>-L</strong> ou
<strong>-h</strong>.</dd>
+ <dt><strong>-ne</strong></dt>
+ <dd>Est numériquement <strong>n</strong>on <strong>é</strong>gal à<br />
+ La <em>Chaîne de test</em> est considérée comme un entier et est
+ numériquement comparée à l'<em>expression de comparaison</em>. Vrai
+ si les deux éléments comparés sont numériquement différents.
+ Equivalent à <code>!-eq</code>.</dd>
+
</dl>
</li>
utiliser avec précautions car les performances du serveur
peuvent s'en trouver affectées !</dd>
- <dt><strong>-H</strong></dt>
+ <dt><strong>-h</strong></dt>
<dd>est un lien symbolique, selon la convention bash<br />
Voir <strong>-l</strong>.</dd>
</p>
<highlight language="config">
- RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"<br />
+ RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
RewriteRule "^/images" "-" [F]
</highlight>
</li>
+ </ol>
- <li>Vous pouvez aussi définir certains drapeaux pour
+ <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>
comme troisième argument de la directive
<code>RewriteCond</code>, où <em>drapeaux</em> est un
- sous-ensemble séparé par des virgules des drapeaux suivants :
+ sous-ensemble séparé par des virgules des drapeaux suivants :</p>
<ul>
<li>'<strong><code>nocase|NC</code></strong>'
fonctionnement de l'en-tête Vary.
</li>
</ul>
- </li>
- </ol>
+
<p><strong>Exemple :</strong></p>
<p><a id="patterns" name="patterns"><em>Modèle</em></a> est une
<a id="regexp" name="regexp">expression rationnelle</a>
- compatible perl. Dans la première règle de réécriture,
- l'expression est comparée au (%-decoded)
- <a href="directive-dict.html#Syntax">chemin de l'URL</a> de la
- requête, ou, dans un contexte de répertoire (voir
- ci-dessous), au chemin de l'URL relativement à ce contexte de
- répertoire. Les expressions suivantes sont comparées à la sortie de
- la dernière règle de réécriture qui
- correspondait.</p>
+ 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>
<note><title><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est comparé ?</a></title>
- <p>Dans un contexte de serveur virtuel <directive
+<ul>
+ <li><p>Dans un contexte de serveur virtuel <directive
module="core">VirtualHost</directive>, le <em>modèle</em> est tout
d'abord comparé à la portion de l'URL située entre le nom d'hôte
éventuellement accompagné du port, et la chaîne de paramètres (par
- exemple "/app1/index.html").</p>
-
- <p>Dans les contextes de répertoire <directive
- module="core">Directory</directive> et htaccess, le
- <em>modèle</em> est tout d'abord comparé au chemin du <em>système
- de fichiers</em>, après suppression du préfixe ou chemin de base
- ayant conduit le serveur vers la règle <directive>RewriteRule</directive> (par
- exemple "app1/index.html" ou
- "index.html" selon l'endroit où les directives sont définies).</p>
+ 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
+ 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>
+
+ <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 correspondant actuel du système de fichiers est déterminé par
+ des directives telles que <directive>DocumentRoot</directive> et
+ <directive>Alias</directive>, ou même le résultat de substitutions dans
+ des règles <directive>RewriteRule</directive> précédentes.
+ </p>
+ </li>
- <p>Si vous souhaitez faire une comparaison sur le nom
+ <li><p>Si vous souhaitez faire une comparaison sur le nom
d'hôte, le port, ou la chaîne de requête, utilisez une
directive <directive module="mod_rewrite">RewriteCond</directive>
comportant respectivement les variables
<code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
- <code>%{QUERY_STRING}</code>.</p>
-
- <p>Dans tous les cas, il faut garder à l'esprit que les expressions
- rationnelles permettent de rechercher des correspondances de sous-chaînes.
- En d'autres termes, l'expression rationnelle n'a pas besoin de correspondre à
- l'ensemble de la chaîne, mais seulement à la partie que vous souhaitez
- voir correspondre. Ainsi, l'utilisation de l'expression <code>.</code> est
- souvent suffisante et préférable à <code>.*</code>, et l'expression
- <code>abc</code> <strong>n'est pas</strong> identique à l'expression
- <code>^abc$</code>.</p>
+ <code>%{QUERY_STRING}</code>.</p></li>
+</ul>
+
</note>
<note><title>Réécritures dans un contexte de répertoire</title>
moteur de réécriture. Cette restriction a été instaurée à des fins de
sécurité.</li>
-<li>Lorsqu'on utilise le moteur de réécriture dans un fichier
-<code>.htaccess</code>, le chemin de base du répertoire courant (qui est
-toujours le même pour ce même répertoire) est automatiquement
-<em>supprimé</em> au cours de la comparaison avec le modèle de la règle
-de réécriture, et automatiquement <em>ajouté</em> lorsqu'une
-substitution relative (ne débutant pas par un slash ou un nom de
-protocole) arrive à la fin d'un jeu de règles. 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>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>RewriteCond</directive>.</li>
+<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
</dl>
- <p>En plus du texte, la chaîne <em>Substition</em> peut
+ <p>En plus du texte, la chaîne <em>Substitution</em> peut
comporter :</p>
<ol>
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 <code>RewriteCond</code>. Les fonctions de comparaison
- sont issues de la directive <code>RewriteMap</code> dans la
+ 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>
des
<strong><code>[</code><em>drapeaux</em><code>]</code></strong>
comme troisième argument de la directive
- <code>RewriteRule</code>. Séparés par des virgules au sein d'une
+ <directive>RewriteRule</directive>. Séparés par des virgules au sein d'une
liste encadrée par des crochets, les <em>drapeaux</em> peuvent
être choisis dans la table suivante. Vous trouverez plus de
détails, et des exemples pour chaque drapeau dans le <a