non-alphanumériques des références arrières seront échappés. Considérons
par exemple cette règle :</p>
-<example>
+<highlight language="config">
RewriteRule ^search/(.*)$ /search.php?term=$1
-</example>
+</highlight>
<p>Soit le terme de recherche 'x & y/z' ; un navigateur va le coder
en 'x%20%26%20y%2Fz', transformant la requête en
<p>Voici un exemple :</p>
-<example>
+<highlight language="config">
RewriteEngine On<br />
RewriteRule ^/index\.html - [CO=frontdoor:yes:.example.org:1440:/]
-</example>
+</highlight>
<p>Dans l'exemple ci-dessus, la règle ne réécrit
pas la requête. La cible de réécriture "-"
image. Cette variable d'environnement est ensuite utilisée pour exclure
une telle requête du journal des accès.</p>
-<example>
-RewriteRule \.(png|gif|jpg) - [E=image:1]<br />
+<highlight language="config">
+RewriteRule \.(png|gif|jpg) - [E=image:1]
CustomLog logs/access_log combined env=!image
-</example>
+</highlight>
<p>Notez que le même effet peut être obtenu à l'aide de la directive
<directive module="mod_setenvif">SetEnvIf</directive>. Cette technique
<p>La règle suivante va interdire la téléchargement de fichiers
<code>.exe</code> depuis votre serveur.</p>
-<example>
+<highlight language="config">
RewriteRule \.exe - [F]
-</example>
+</highlight>
<p>Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce
qui signifie que l'URI de la requête n'est pas modifié. Il n'y a aucune
<p>Comme dans le cas du drapeau [F], on utilise en général la syntaxe
"-" pour la cible de réécriture lorsqu'on utilise le drapeau [G] :</p>
-<example>
+<highlight language="config">
RewriteRule ancienne-ressource - [G,NC]
-</example>
+</highlight>
<p>Lorsqu'on utilise [G], [L] est implicite - c'est à dire que la
réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.</p>
l'interprétation de tous les fichiers sans extension par le gestionnaire
php :</p>
-<example>
+<highlight language="config">
RewriteRule !\. - [H=application/x-httpd-php]
-</example>
+</highlight>
<p>
L'expression rationnelle ci-dessus - <code>!\.</code> - correspond à
<em>affichés</em> par <code>mod_php</code> dans le cas où ils font
l'objet d'une requête avec l'extension <code>.phps</code> :</p>
-<example>
+<highlight language="config">
RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
-</example>
+</highlight>
<p>L'expression rationnelle ci-dessus -
la requête concerne déjà <code>index.php</code>, la directive <directive
module="mod_rewrite">RewriteRule</directive> sera sautée.</p>
-<example>
-RewriteBase /<br />
-RewriteCond %{REQUEST_URI} !=/index.php<br />
+<highlight language="config">
+RewriteBase /
+RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^(.*) /index.php?req=$1 [L,PT]
-</example>
+</highlight>
</section>
<section id="flag_n"><title>N|next</title>
ceci jusqu'il n'y ait plus de A à remplacer.
</p>
-<example>
+<highlight language="config">
RewriteRule (.*)A(.*) $1B$2 [N]
-</example>
+</highlight>
<p>Vous pouvez vous représenter ce traitement comme une boucle
<code>while</code> : tant que le modèle de la règle correspond (c'est à
insensible à la casse, si bien que par exemple, <code>.jpg</code> aussi
bien que <code>.JPG</code> seront acceptés.</p>
-<example>
+<highlight language="config">
RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]
-</example>
+</highlight>
</section>
<section id="flag_ne"><title>NE|noescape</title>
hexadécimal. Le drapeau [NE] permet d'éviter cette conversion.
</p>
-<example>
+<highlight language="config">
RewriteRule ^/ancre/(.+) /grosse-page.html#$1 [NE,R]
-</example>
+</highlight>
<p>
Dans l'exemple ci-dessus, <code>/anchor/xyz</code> est réécrit en
soient traitées par un serveur d'images annexe, vous pouvez utiliser
une règle de ce style :</p>
-<example>
+<highlight language="config">
RewriteRule /(.*)\.(jpg|gif|png) http://images.example.com/$1.$2 [P]
-</example>
+</highlight>
<p>L'utilisation du drapeau [P] provoque aussi l'effet du drapeau [L] -
autrement dit, la requête est immédiatement envoyée au mandataire, et
module="mod_alias">Alias</directive> sera bien évalué.
</p>
-<example>
+<highlight language="config">
Alias /icons /usr/local/apache/icons<br />
RewriteRule /pics/(.+)\.jpg /icons/$1.gif [PT]
-</example>
+</highlight>
<p>
Dans l'exemple précédent, en l'absence du drapeau [PT], l'Alias aurait
<p>Considérons la règle suivante :</p>
-<example>
+<highlight language="config">
RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
-</example>
+</highlight>
<p>Avec le drapeau [QSA], une requête pour
<code>/pages/123?one=two</code> sera réécrite en
module="mod_rewrite">RewriteRule</directive> que si l'URI demandé ne
correspond pas à un fichier existant.</p>
-<example>
-# La requête concerne-t-elle un fichier qui n'existe pas ?<br />
-RewriteCond %{REQUEST_FILENAME} !-f<br />
-RewriteCond %{REQUEST_FILENAME} !-d<br />
-# Si c'est la cas, on saute les deux règles de réécriture suivantes<br />
-RewriteRule .? - [S=2]<br />
-<br />
-RewriteRule (.*\.gif) images.php?$1<br />
+<highlight language="config">
+# La requête concerne-t-elle un fichier qui n'existe pas ?
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+# Si c'est la cas, on saute les deux règles de réécriture suivantes
+RewriteRule .? - [S=2]
+
+RewriteRule (.*\.gif) images.php?$1
RewriteRule (.*\.html) docs.php?$1
-</example>
+</highlight>
<p>Cette technique trouve son utilité dans le fait qu'une directive
<directive module="mod_rewrite">RewriteCond</directive> ne s'applique
d'élaborer des pseudo-constructions if-then-else : la dernière règle du
bloc then contiendra <code>skip=N</code>, où N est le nombre de règles
contenues dans le bloc else :</p>
-<example>
-# Est-ce que le fichier existe ?<br />
-RewriteCond %{REQUEST_FILENAME} !-f<br />
-RewriteCond %{REQUEST_FILENAME} !-d<br />
+<highlight language="config">
+# Est-ce que le fichier existe ?
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
<!-- A traduire pour qui y comprend quelquechose -->
# Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.<br />
-RewriteRule .? - [S=3]<br />
-<br />
+RewriteRule .? - [S=3]
+
# Si le fichier existe, alors :
-<indent>
- RewriteRule (.*\.gif) images.php?$1<br />
- RewriteRule (.*\.html) docs.php?$1<br />
- # Skip past the "else" stanza.<br />
- RewriteRule .? - [S=1]<br />
-</indent>
+ RewriteRule (.*\.gif) images.php?$1
+ RewriteRule (.*\.html) docs.php?$1
+ # Skip past the "else" stanza.
+ RewriteRule .? - [S=1]
# ELSE...
-<indent>
- RewriteRule (.*) 404.php?file=$1<br />
-</indent>
+ RewriteRule (.*) 404.php?file=$1
# END
-</example>
+</highlight>
<p>Il est probablement plus aisé de définir ce genre de configuration
via les directives <directive type="section">If</directive>, <directive
du code source Perl en tant que plein texte, s'il est requis d'une
certaine manière :</p>
-<example>
-# Sert les fichier .pl en tant que plein texte<br />
+<highlight language="config">
+# Sert les fichier .pl en tant que plein texte
RewriteRule \.pl$ - [T=text/plain]
-</example>
+</highlight>
<p>Ou encore, si vous possédez une caméra qui produit des fichiers
images jpeg sans extension, vous pouvez forcer le renvoi de ces images
avec le type MIME correct en se basant sur le nom du fichier :</p>
-<example>
+<highlight language="config">
# Les fichiers dont le nom contient 'IMG' sont des images jpg.<br />
RewriteRule IMG - [T=image/jpg]
-</example>
+</highlight>
<p>Notez cependant qu'il s'agit d'un exemple trivial, et que le problème
aurait pu être résolu en utilisant à la place la directive <directive
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1325683:1332592 (outdated) -->
+<!-- English Revision: 1332592 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
<p>La chaîne de <var>Substitution</var> peut aussi contenir des
<em>références arrières</em> vers des parties du chemin d'URL entrant
correspondant au <var>Modèle</var>. Considérons ce qui suit :</p>
-<example>
+<highlight language="config">
RewriteRule ^/produits/(.*)/view$ /var/web/produitsdb/$1
-</example>
+</highlight>
<p>La variable <code>$1</code> sera remplacée par tout texte
correspondant à l'expression située entre les parenthèses dans le
<var>Modèle</var>. Par exemple, une requête pour
conditions de correspondance d'une règle peuvent être rendues
insensibles à la casse par la présence du drapeau <code>[NC]</code> :
</p>
-<example>
+<highlight language="config">
RewriteRule ^puppy.html petitchien.html [NC]
-</example>
+</highlight>
<p>Pour une liste des drapeaux disponibles, leurs significations, et des
exemples, voir le document <a href="flags.html">Drapeaux de
<p>Par exemple, pour renvoyer toutes les requêtes en provenance d'une
certaine tranche d'adresses IP vers un autre serveur, vous pouvez
utiliser :</p>
-<example>
-RewriteCond %{REMOTE_ADDR} ^10\.2\.<br />
+<highlight language="config">
+RewriteCond %{REMOTE_ADDR} ^10\.2\.
RewriteRule (.*) http://intranet.example.com$1
-</example>
+</highlight>
<p>Si vous spécifiez plus d'une directive <directive
module="mod_rewrite">RewriteCond</directive>, ces directives
pour interdire les requêtes qui contiennent le mot "hack" dans la chaîne
de requête, sauf si elles contiennent aussi un cookie contenant le mot
"go", vous pouvez utiliser :</p>
-<example>
-RewriteCond %{QUERY_STRING} hack<br />
-RewriteCond %{HTTP_COOKIE} !go<br />
+<highlight language="config">
+RewriteCond %{QUERY_STRING} hack
+RewriteCond %{HTTP_COOKIE} !go
RewriteRule . - [F]
-</example>
+</highlight>
<p>Notez que le point d'exclamation indique une correspondance négative
; ainsi, la règle n'est appliquée que si le cookie ne contient pas "go"</p>
les variables <code>%1</code>, <code>%2</code>, etc... Par
exemple, ce qui suit va diriger la requête vers un répertoire différent
en fonction du nom d'hôte utilisé pour accéder au site :</p>
-<example>
-RewriteCond %{HTTP_HOST} (.*)<br />
+<highlight language="config">
+RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/(.*) /sites/%1/$1
-</example>
+</highlight>
<p>Si la requête concernait <code>http://example.com/foo/bar</code>,
alors <code>%1</code> contiendrait <code>example.com</code> et
<code>$1</code> contiendrait <code>foo/bar</code>.</p>