mod_rewrite.html.fr revision 3f08db06526d6901aa08c110b5bc7dde6bc39905
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>mod_rewrite - Serveur Apache HTTP</title>
<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="/images/favicon.ico" rel="shortcut icon" /></head>
<body>
<div id="page-header">
<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="/faq/">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p>
<p class="apache">Serveur Apache HTTP Version 2.5</p>
<img alt="" src="/images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_rewrite</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="/en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="/fr/mod/mod_rewrite.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Ce module fournit un moteur de r��criture � base de
r�gles permettant de r��crire les URLs des requ�tes
� la vol�e</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur�de�Module:</a></th><td>rewrite_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier�Source:</a></th><td>mod_rewrite.c</td></tr></table>
<h3>Sommaire</h3>
<p>Le module <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> utilise un moteur de
r��criture � base de r�gles, bas� sur un interpr�teur
d'expressions rationnelles, pour r��crire les URLs � la vol�e. Par
d�faut, <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> met en correspondance une URL
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><code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> 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><code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> 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>Vous trouverez d'avantage de d�tails, discussions et exemples
dans la
<a href="/rewrite/">documentation d�taill�e
sur mod_rewrite</a>.</p>
</div>
<div id="quickview"><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="/images/down.gif" /> <a href="#rewritebase">RewriteBase</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#rewritecond">RewriteCond</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#rewriteengine">RewriteEngine</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#rewritemap">RewriteMap</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#rewriteoptions">RewriteOptions</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#rewriterule">RewriteRule</a></li>
</ul>
<h3>Sujets</h3>
<ul id="topics">
<li><img alt="" src="/images/down.gif" /> <a href="#logging">Journalisation</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="logging" id="logging">Journalisation</a></h2>
<p><code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> offre une journalisation d�taill�e
de ses actions aux niveaux de journalisation <code>trace1</code> �
<code>trace8</code>. Le niveau de journalisation peut �tre d�fini de
mani�re sp�cifique � <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> via la directive
<code class="directive"><a href="/mod/core.html#loglevel">LogLevel</a></code> : jusqu'au niveau
<code>debug</code> aucune action n'est journalis�e, alors qu'elles
le sont pratiquement toutes au niveau <code>trace8</code>.</p>
<div class="note">
L'utilisation d'un niveau de journalisation �lev� pour
<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> va ralentir votre serveur HTTP Apache
de mani�re dramatique ! N'utilisez un niveau de journalisation
sup�rieur � <code>trace2</code> qu'� des fins de d�bogage !
</div>
<div class="example"><h3>Exemple</h3><p><code>
LogLevel alert rewrite:trace3
</code></p></div>
<div class="note"><h3>RewriteLog</h3>
<p>Ceux qui sont familiers avec les versions pr�c�dentes de
<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> 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>
<p>Pour extraire les traces sp�cifiques �
<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>, affichez le fichier journal en
redirigeant la sortie vers grep :</p>
<div class="example"><p><code>
tail -f error_log|fgrep '[rewrite:'
</code></p></div>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteBase" id="RewriteBase">RewriteBase</a> <a name="rewritebase" id="rewritebase">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D�finit l'URL de base pour les r��critures au niveau
r�pertoire</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteBase <em>chemin URL</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D�faut:</a></th><td><code>Pas de valeur par d�faut</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>r�pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
</table>
<p>La directive <code class="directive">RewriteBase</code> d�finit
explicitement le chemin URL de base (et non le chemin du
r�pertoire dans le syst�me de fichiers !) pour les r��critures dans un contexte
de r�pertoire dont le r�sultat est la substitution d'un
chemin relatif. Lorsque vous utilisez une directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code> dans un fichier
<code>.htaccess</code>, <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> enl�ve le
pr�fixe de r�pertoire local avant d'effectuer le traitement, puis
r��crit ce qui reste de l'URL. Lorsque la r��criture est termin�e,
<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> ajoute automatiquement le pr�fixe de
r�pertoire local (ou la valeur de la directive
<code class="directive">RewriteBase</code> si cette derni�re est d�finie)
� la cha�ne de substitution avant de la remettre � disposition du
serveur, comme s'il s'agissait de l'URL d'origine.</p>
<p>Cette directive est <em>requise</em> pour les r��critures
dans un contexte de r�pertoire d�fini via la directive
<code class="directive"><a href="/mod/mod_alias.html#alias">Alias</a></code> lorsque la
substitution utilise un chemin relatif.</p>
<p>Si votre chemin URL n'existe pas r�ellement dans le syst�me de
fichiers, ou ne trouve pas directement sous le r�pertoire d�fini
par la directive <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code>, vous devez utiliser la
directive <code class="directive">RewriteBase</code> dans chaque fichier
<code>.htaccess</code> o� vous voulez utiliser des directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code>.</p>
<p>L'exemple ci-dessous montre comment faire correspondre
http://example.com/mon-appli/index.html
/home/www/exemple/nouveau_site.html dans un fichier
<code>.htaccess</code>. On suppose que le contenu disponible �
http://example.com/ se situe sur le disque �
/home/www/exemple/.</p>
<div class="example"><pre>
RewriteEngine On
# Le chemin URL utilis� pour arriver dans ce contexte, et non le chemin
# du syst�me de fichiers
RewriteBase /mon-appli/
RewriteRule ^index\.html$ nouveau_site.html
</pre></div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteCond" id="RewriteCond">RewriteCond</a> <a name="rewritecond" id="rewritecond">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D�finit une condition qui devra �tre satisfaite pour que
la r��criture soit effectu�e
</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code> RewriteCond
<em>cha�ne de test</em> <em>expression de comparaison</em></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
</table>
<p>La directive <code class="directive">RewriteCond</code> permet de d�finir une
condition d'ex�cution d'une r�gle. Une ou plusieurs conditions
<code class="directive">RewriteCond</code> peuvent pr�c�der une
directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code>. La r�gle de r��criture correspondante n'est
ainsi ex�cut�e que si ces conditions sont satisfaites,
<strong>et</strong> si l'URI correspond au mod�le sp�cifi� dans la
r�gle.</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 &lt;= N &lt;= 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 &lt;= N &lt;= 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>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"&gt;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 :
<table>
<tr>
<th>En-t�tes HTTP :</th> <th>connexion &amp; requ�te:</th> <th />
</tr>
<tr>
<td>
HTTP_USER_AGENT<br />
HTTP_REFERER<br />
HTTP_COOKIE<br />
HTTP_FORWARDED<br />
HTTP_HOST<br />
HTTP_PROXY_CONNECTION<br />
HTTP_ACCEPT<br />
</td>
<td>
REMOTE_ADDR<br />
REMOTE_HOST<br />
REMOTE_PORT<br />
REMOTE_USER<br />
REMOTE_IDENT<br />
REQUEST_METHOD<br />
SCRIPT_FILENAME<br />
PATH_INFO<br />
QUERY_STRING<br />
AUTH_TYPE<br />
</td>
<td />
</tr>
<tr>
<th>variables internes au serveur :</th> <th>date et heure :</th> <th>sp�ciaux :</th>
</tr>
<tr>
<td>
DOCUMENT_ROOT<br />
SERVER_ADMIN<br />
SERVER_NAME<br />
SERVER_ADDR<br />
SERVER_PORT<br />
SERVER_PROTOCOL<br />
SERVER_SOFTWARE<br />
</td>
<td>
TIME_YEAR<br />
TIME_MON<br />
TIME_DAY<br />
TIME_HOUR<br />
TIME_MIN<br />
TIME_SEC<br />
TIME_WDAY<br />
TIME<br />
</td>
<td>
API_VERSION<br />
THE_REQUEST<br />
REQUEST_URI<br />
REQUEST_FILENAME<br />
IS_SUBREQ<br />
HTTPS<br />
REQUEST_SCHEME<br />
</td>
</tr>
</table>
<p>Ces variables correspondent toutes aux en-t�tes MIME
HTTP de m�mes noms, au variables C du serveur HTTP Apache, ou
aux champs <code>struct tm</code> du syst�me Unix. La
plupart d'entre elles sont document�es ailleurs dans le
manuel ou dans la sp�cification CGI.</p>
<p>SERVER_NAME et SERVER_PORT d�pendent respectivement
des valeurs des directives <code class="directive"><a href="/mod/core.html#usecanonicalname">UseCanonicalName</a></code> et <code class="directive"><a href="/mod/core.html#usecanonicalphysicalport">UseCanonicalPhysicalPort</a></code>.</p>
<p>Parmi les variables
sp�cifiques � mod_rewrite, ou trouve les suivantes :</p>
<div class="note">
<dl>
<dt><code>IS_SUBREQ</code></dt>
<dd>Contient le texte "true" si la requ�te en cours
de traitement est une sous-requ�te, "false" dans le
cas contraire. Une sous-requ�te est g�n�r�e quand un
module a besoin de se r�f�rer � des fichiers ou URIs
addidionnels pour pouvoir mener � bien sa t�che.</dd>
<dt><code>API_VERSION</code></dt>
<dd>C'est la version de l'API des modules Apache httpd
(l'interface interne entre le serveur et les modules)
pour la construction courante de httpd, telle qu'elle
est d�finie dans include/ap_mmn.h. La version de l'API
des modules correspond � la version du serveur Apache
httpd
utilis� (par exemple, pour la version 1.3.14 d'Apache
httpd,
il s'agit de la version 19990320:10), mais int�resse
principalement les auteurs de modules.</dd>
<dt><code>THE_REQUEST</code></dt>
<dd>La ligne de requ�te HTTP compl�te envoy�e par le
navigateur au serveur (par exemple, "<code>GET
/index.html HTTP/1.1</code>"), � l'exclusion de tout
en-t�te ajout� par le navigateur. Cette
valeur n'a pas �t� d�s�chapp�e (d�cod�e), � la
diff�rence de la plupart des variables suivantes.</dd>
<dt><code>REQUEST_URI</code></dt>
<dd>La partie chemin de l'URI de la requ�te, comme
"/index.html". En particulier, ceci exclut la cha�ne
de param�tres qui est quant � elle disponible via sa
propre variable <code>QUERY_STRING</code>.</dd>
<dt><code>REQUEST_FILENAME</code></dt>
<dd>Le chemin complet local au syst�me de fichiers
du fichier ou du script correspondant
� la requ�te, s'il a d�j� �t� d�termin� par le serveur
au moment o� on y fait r�f�rence. Dans le cas
contraire, et en particulier dans le cas d'un serveur
virtuel, <code>REQUEST_FILENAME</code> contient la
valeur de <code>REQUEST_URI</code>.</dd>
<dt><code>HTTPS</code></dt>
<dd>Contient le texte "on" si la connexion
utilise SSL/TLS, "off" dans le cas contraire
(Cette variable peut �tre utilis�e sans probl�me, que
<code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> soit charg� ou non.</dd>
<dt><code>REQUEST_SCHEME</code></dt>
<dd>Contient le protocole de la requ�te (en g�n�ral
"http" ou "https"). La valeur peut �tre modifi�e par
la directive <code class="directive"><a href="/mod/core.html#servername">ServerName</a></code>.</dd>
</dl>
</div>
</li>
</ul>
<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>.</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
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>
<li>Que <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> 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 <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> n'est pas
charg�, cette variable contiendra toujours une cha�ne vide.
Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
contenir la valeur <code>128</code>.</li>
<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
requ�te HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
contiendra la valeur de l'en-t�te HTTP
"<code>Proxy-Connection:</code>".
Si on utilise un en-t�te HTTP
dans une condition, et si cette condition est �valu�e �
<code>vrai</code> pour la requ�te, cet en-t�te sera ajout� � l'en-t�te Vary de
la r�ponse. Il ne le sera pas si la condition est �valu�e �
<code>faux</code>. L'ajout de l'en-t�te HTTP � l'en-t�te Vary
est n�cessaire � une mise en cache appropri�e.
<p>Il faut garder � l'esprit que les conditions suivent une
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>
<li>A des fins de r�f�rence avant, on peut utiliser,
<code>%{LA-U:variable}</code>, 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 mod_rewrite op�re).</p>
<p>Par contre, comme mod_rewrite 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>
<p><em>expression de comparaison</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
�valu�e, puis compar�e �
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
disposez des syntaxes suppl�mentaires suivantes pour effectuer
d'autres tests utiles sur <em>cha�ne de test</em> :
</p>
<ol>
<li>Vous pouvez pr�fixer l'expression avec un caract�re
'<code>!</code>' (point d'exclamation) pour indiquer une
expression de <strong>non</strong>-correspondance.</li>
<li>Vous pouvez effectuer des comparaisons lexicographiques de
cha�nes :
<ul>
<li>'<strong>&lt;expression</strong>' (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
lexicographique � l'<em>expression</em>.</li>
<li>'<strong>&gt;expression</strong>' (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
lexicographique � l'<em>expression</em>.</li>
<li>'<strong>=expression</strong>' (�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
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 cha�ne vide.</li>
<li>'<strong>&lt;=expression de comparaison</strong>' (inf�rieur ou �gal �
au sens lexicographique)<br />
Consid�re l'<em>expression de comparaison</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
sont identiques, caract�re pour caract�re).</li>
<li>'<strong>&gt;=expression de comparaison</strong>'
(sup�rieur ou �gal � au sens lexicographique)<br />
Consid�re l'<em>expression de comparaison</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
sont identiques, caract�re pour caract�re).</li>
</ul></li>
<li>
Vous pouvez effectuer des comparaisons d'entiers :
<ul>
<li>'<strong>-eq</strong>' (est num�riquement �gal �)<br />
La <em>cha�ne de test</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.</li>
<li>'<strong>-ge</strong>' (est num�riquement sup�rieur ou
�gal �)<br />
La <em>cha�ne de test</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
num�riquement
sup�rieure ou �gale � <em>expression de comparaison</em>.</li>
<li>'<strong>-gt</strong>' (est num�riquement sup�rieur �)<br />
La <em>cha�ne de test</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
num�riquement
sup�rieure � <em>expression de comparaison</em>.</li>
<li>'<strong>-le</strong>' (est num�riquement inf�rieur ou
�gal �)<br />
La <em>cha�ne de test</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
num�riquement
inf�rieure ou �gale � <em>expression de comparaison</em>.
Attention � la confusion avec le drapeau <strong>-l</strong>
en utilisant la variante the <strong>-L</strong> ou
<strong>-h</strong>.</li>
<li>'<strong>-lt</strong>' (est num�riquement inf�rieur �)<br />
La <em>cha�ne de test</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
num�riquement
inf�rieure � <em>expression de comparaison</em>.
Attention � la confusion avec le drapeau <strong>-l</strong>
en utilisant la variante the <strong>-L</strong> ou
<strong>-h</strong>.</li>
</ul>
</li>
<li>Vous pouvez effectuer diff�rents tests sur les attributs de
fichier :
<ul>
<li>'<strong>-d</strong>' (est un r�pertoire -
<strong>d</strong>irectory)<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 r�pertoire.</li>
<li>'<strong>-f</strong>' (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.</li>
<li>'<strong>-F</strong>' (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,
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 !</li>
<li>'<strong>-H</strong>' (est un lien symbolique, selon la
convention bash)<br />
Voir <strong>-l</strong>.</li>
<li>'<strong>-l</strong>' (est un lien symbolique)<br />
Consid�re la <em>cha�ne de test</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
avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</li>
<li>'<strong>-L</strong>' (est un lien symbolique, selon la
convention bash)<br />
Voir <strong>-l</strong>.</li>
<li>'<strong>-s</strong>' (est un fichier r�gulier d'une
certaine taille)<br />
Consid�re la <em>cha�ne de test</em> comme un chemin et
v�rifie son existence et si elle est un fichier r�gulier
d'une taille sup�rieure � z�ro.</li>
<li>'<strong>-U</strong>' (test de l'existence d'une
<strong>U</strong>RL via une sous-requ�te)<br />
V�rifie si <em>cha�ne de test</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 - �
utiliser avec pr�cautions car les performances du serveur
peuvent s'en trouver affect�es !</li>
<li>'<strong>-x</strong>' (a l'attribut d'ex�cution positionn�)<br />
Consid�re la <em>cha�ne de test</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.</li>
</ul>
<div class="note"><h3>Note :</h3>
Tous ces tests peuvent aussi �tre pr�fix�s par un point
d'exclamation ('!') pour inverser leur signification.
</div>
</li>
<li>
<p>Si la <em>cha�ne de test</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>
<p>
Dans l'exemple ci-dessous, on utilise <code>-strmatch</code>
pour comparer le <code>REFERER</code> avec le nom d'h�te du
site afin de bloquer le hotlinking (r�f�rencement direct)
non d�sir�.
</p>
<div class="example"><p><code>
RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"<br />
RewriteRule ^/images - [F]
</code></p></div>
</li>
<li>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 :
<ul>
<li>'<strong><code>nocase|NC</code></strong>'
(<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
v�rification par sous-requ�tes ou sur le syst�me de
fichiers.</li>
<li>
'<strong><code>ornext|OR</code></strong>'
(<strong>ou</strong> condition suivante)<br />
Permet de cha�ner les conditions de r�gles avec un OU au
lieu du AND implicite. Exemple typique :
<div class="example"><pre>
RewriteCond %{REMOTE_HOST} ^host1 [OR]
RewriteCond %{REMOTE_HOST} ^host2 [OR]
RewriteCond %{REMOTE_HOST} ^host3
RewriteRule ...r�gles concernant tous ces h�tes...
</pre></div>
Sans ce drapeau, les paires
condition/r�gle devraient �tre �crites trois fois.
</li>
<li>'<strong><code>novary|NV</code></strong>'
(<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
incorrecte de la r�ponse, si la repr�sentation de cette r�ponse
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>
</li>
</ol>
<p><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
pouvez utiliser ce qui suit : </p>
<div class="example"><pre>
RewriteCond %{HTTP_USER_AGENT} ^Mozilla
RewriteRule ^/$ /homepage.max.html [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx
RewriteRule ^/$ /homepage.min.html [L]
RewriteRule ^/$ /homepage.std.html [L]
</pre></div>
<p>Explications : si vous utilisez un navigateur
(Netscape Navigator, Mozilla etc) qui s'identifie comme
'Mozilla', vous acc�derez � la page d'accueil max (qui
peut contenir des frames, ou d'autres ressources
particuli�res).
Si vous utilisez le navigateur Lynx (qui est un navigateur
en mode texte), vous acc�derez � une page d'accueil min
(qui peut �tre une version con�ue pour une navigation simple
bas�e sur le texte).
Si aucune de ces conditions n'est satisfaite (vous utilisez tout
autre navigateur, ou votre navigateur s'identifie de mani�re non
standard), vous acc�derez � la page d'accueil std
(standard).</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a> <a name="rewriteengine" id="rewriteengine">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active ou d�sactive l'ex�cution du
moteur de r��criture</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteEngine on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D�faut:</a></th><td><code>RewriteEngine off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
</table>
<p>La directive <code class="directive">RewriteEngine</code> active ou
d�sactive l'ex�cution du moteur de r��criture. Si sa valeur est
<code>off</code>, ce module n'ex�cutera aucun traitement et ne
mettra pas � jour les variables d'environnement
<code>SCRIPT_URx</code>.</p>
<p>Pour d�sactiver le module, il vaut mieux utiliser cette
directive que commenter toutes les directives <code class="directive"><a href="#rewriterule">RewriteRule</a></code> !</p>
<p>Notez que les h�tes virtuels n'h�ritent pas des
configurations de r��criture. Ceci implique que vous devez
ins�rer une directive <code>RewriteEngine on</code> dans chaque
h�te virtuel pour lequel vous souhaitez utiliser des r�gles
de r��criture.</p>
<p>Les directives <code class="directive">RewriteMap</code> 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 <code class="directive">RewriteEngine</code> n'a
pas �t� d�finie � <code>on</code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteMap" id="RewriteMap">RewriteMap</a> <a name="rewritemap" id="rewritemap">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D�finit une fonction de mise en correspondance pour la
recherche de mots-cl�s</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteMap <em>nom de la correspondance</em> <em>type de
correspondance</em>:<em>source de la correspondance</em>
</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Il est possible de choisir entre plusieurs types de
bases de donn�es depuis la version 2.0.41 du serveur HTTP Apache</td></tr>
</table>
<p>La directive <code class="directive">RewriteMap</code> d�finit une
<em>Table de correspondance pour la r��criture</em> que les
fonctions de mise en correspondance
peuvent utiliser dans les cha�nes de substitution des r�gles
pour ins�rer/substituer des champs en recherchant des mots-cl�s.
La source utilis�e pour cette recherche peut �tre de plusieurs
types.</p>
<p><a id="mapfunc" name="mapfunc"><em>nom de la
correspondance</em></a> est le nom de la table de correspondance
et servira � sp�cifier une fonction de mise en correspondance
pour les cha�nes de substitution d'une r�gle de r��criture selon
une des constructions suivantes :</p>
<p class="indent">
<strong><code>${</code> <em>nom de la
correspondance</em> <code>:</code>
<em>mot-cl�</em> <code>}</code><br />
<code>${</code> <em>nom de la
correspondance</em> <code>:</code>
<em>mot-cl�</em> <code>|</code> <em>valeur par d�faut</em>
<code>}</code></strong>
</p>
<p>Lorsqu'une telle construction est rencontr�e, la table de
correspondance <em>Nom de la correspondance</em> est consult�e
et la cl� <em>mot-cl�</em> recherch�e. Si la cl� est trouv�e, la
construction est remplac�e par
la <em>valeur de remplacement</em>. Si la cl� n'est pas trouv�e,
elle est remplac�e par la <em>valeur par d�faut</em>, ou par une
cha�ne vide si aucune <em>valeur par d�faut</em> n'est
sp�cifi�e. La valeur vide se comporte comme si la
cl� �tait absente ; il est donc impossible de distinguer une
valeur vide d'une absence de cl�.</p>
<p>Par exemple, vous pouvez d�finir une directive
<code class="directive">RewriteMap</code> comme suit </p>
<div class="example"><p><code>
RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt
</code></p></div>
<p>Vous pourrez ensuite utiliser cette table dans une
directive <code class="directive">RewriteRule</code> comme suit :</p>
<div class="example"><p><code>
RewriteRule ^/ex/(.*) ${map-exemple:$1}
</code></p></div>
<p>Les combinaisons suivantes pour <em>type de correspondance</em>
et <em>source de la correspondance</em>
peuvent �tre utilis�es :</p>
<dl>
<dt>txt</dt>
<dd>Un fichier texte contenant des paires cl�-valeur s�par�es
par des espaces, une paire par ligne (<a href="/rewrite/rewritemap.html#txt">D�tails ...</a>).</dd>
<dt>rnd</dt>
<dd>S�lection al�atoire d'une entr�e depuis un fichier texte (<a href="/rewrite/rewritemap.html#rnd">D�tails ...</a>).</dd>
<dt>dbm</dt>
<dd>Recherche une entr�e dans un fichier dbm contenant des
paires nom-valeur. Le condens� hash est �labor� � partir d'un
format de fichier texte via l'utilitaire <code><a href="/programs/httxt2dbm.html">httxt2dbm</a></code> (<a href="/rewrite/rewritemap.html#dbm">D�tails ...</a>).</dd>
<dt>int</dt>
<dd>Une des quatre fonctions internes disponibles que fournit
<code>RewriteMap</code>: toupper, tolower, escape ou unescape
(<a href="/rewrite/rewritemap.html#int">D�tails ...</a>).</dd>
<dt>prg</dt>
<dd>Appelle un programme externe ou un script pour effectuer la
r��criture (<a href="/rewrite/rewritemap.html#int">D�tails
...</a>).</dd>
<dt>dbd or fastdbd</dt>
<dd>Une commande SQL SELECT � ex�cuter pour rechercher la cible
de r��criture (<a href="/rewrite/rewritemap.html#int">D�tails
...</a>).</dd>
</dl>
<p>Vous trouverez plus de d�tails et de nombreux exemples dans le <a href="/rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions" id="rewriteoptions">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure certaines options sp�ciales
pour le moteur de r��criture</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td><code>MaxRedirects</code> n'est plus disponible depuis
la version version 2.1</td></tr>
</table>
<p>La directive <code class="directive">RewriteOptions</code> d�finit
certaines options sp�ciales pour la configuration au niveau du
serveur ou du r�pertoire. La cha�ne de caract�res <em>Option</em>
ne peut actuellement prendre qu'une des valeurs suivantes :</p>
<dl>
<dt><code>Inherit</code></dt>
<dd>
<p>Ceci force la configuration locale � h�riter de la
configuration du niveau sup�rieur. Dans le contexte des h�tes
virtuels, cela signifie que les correspondances, conditions et
r�gles du serveur principal sont h�rit�es. Dans le contexte des
r�pertoires, cela signifie que les conditions et r�gles de la
configuration <code>.htaccess</code> ou les sections <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> du r�pertoire
parent sont h�rit�es. Les r�gles h�rit�es sont virtuellement
copi�es dans la section o� cette directive est utilis�e. Si elles
sont utilis�es avec des r�gles locales, les r�gles h�rit�es sont
plac�es apr�s ces derni�res. La place de cette directive - avant
ou apr�s les r�gles locales - n'a aucune influence sur ce
comportement. Si des r�gles locales ont forc� l'arr�t de la
r��criture, les r�gles h�rit�es ne seront pas trait�es.</p>
<div class="warning">
Les r�gles h�rit�es du niveau parent sont appliqu�es
<strong>after</strong> apr�s les r�gles sp�cifi�es dans le niveau
enfant.
</div>
</dd>
<dt><code>InheritBefore</code></dt>
<dd>
<p>M�me effet que l'option <code>Inherit</code> ci-dessus, mais
les r�gles sp�cifi�es dans le niveau parent s'appliquent
<strong>avant</strong> les r�gles sp�cifi�es dans le niveau
enfant. Disponible depuis la version 2.3.10 du serveur HTTP
Apache.</p>
</dd>
</dl>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteRule" id="RewriteRule">RewriteRule</a> <a name="rewriterule" id="rewriterule">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D�finit les r�gles pour le moteur de r��criture</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RewriteRule
<em>Mod�le</em> <em>Substitution</em> [<em>drapeaux</em>]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
</table>
<p>La directive <code class="directive">RewriteRule</code> est le
v�ritable cheval de trait de la r��criture. La directive peut
appara�tre plusieurs fois, chaque instance d�finissant une
r�gle de r��criture particuli�re. L'ordre dans lequel ces r�gles
sont d�finies est important - il s'agit de l'ordre dans lequel
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. 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 ; les expressions suivantes sont compar�es � la sortie de
la derni�re r�gle de r��criture qui a �t� appliqu�e.</p>
<div class="note"><h3><a id="what_is_matched" name="what_is_matched">Qu'est-ce qui est compar� ?</a></h3>
<p>Dans un contexte de serveur virtuel <code class="directive"><a href="/mod/core.html#virtualhost">VirtualHost</a></code>, le <em>mod�le</em> est tout
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 <code class="directive"><a href="/mod/core.html#directory">Directory</a></code> 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 � la r�gle <code class="directive">RewriteRule</code> (par
exemple "app1/index.html" ou
"index.html" selon l'endroit o� les directives sont d�finies).</p>
<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 <code class="directive"><a href="#rewritecond">RewriteCond</a></code>
comportant respectivement les variables
<code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
<code>%{QUERY_STRING}</code>.</p>
</div>
<div class="note"><h3>R��critures dans un contexte de r�pertoire</h3>
<ul>
<li>L'utilisation du moteur de r��criture dans les
fichiers <a href="/howto/htaccess.html">.htaccess</a> et les sections
<code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> 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>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
<code class="directive"><a href="#rewritebase">RewriteBase</a></code> 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
<code class="directive">RewriteCond</code>.</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>Bien que les r�gles de r��criture soient permises du point de vue de
la syntaxe dans les sections <code class="directive"><a href="/mod/core.html#location">&lt;Location&gt;</a></code> et <code class="directive"><a href="/mod/core.html#files">&lt;Files&gt;</a></code>, elles n'y sont pas prises en compte, et
n'y sont � priori d'aucune utilit�.</li>
</ul>
</div>
<p>Pour quelques conseils � propos des <a class="glossarylink" href="/glossary.html#regex" title="voir glossaire">expressions rationnelles</a>, voir le
document <a href="/rewrite/intro.html#regex">Introduction �
mod_rewrite</a>.</p>
<p>Dans mod_rewrite, on peut aussi utiliser le caract�re NON
('<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>
<div class="note"><h3>Note</h3>
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 !
</div>
<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>
<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.</dd>
<dt>chemin d'URL</dt>
<dd>Un chemin relatif � la valeur de <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code> vers la ressource qui
doit �tre servie. Notez que <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>
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, 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
correspondance d'URL (comme la directive <code class="directive"><a href="/mod/mod_alias.html#alias">Alias</a></code>) soient appliqu�es au
chemin d'URL r�sultant, utilisez le drapeau <code>[PT]</code>
comme d�crit ci-dessous.</dd>
<dt>URL absolue</dt>
<dd>Si une URL absolue est sp�cifi�e,
<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> v�rifie si le nom d'h�te
correspond � celui de l'h�te local. Si c'est le cas, le
protocole et le nom d'h�te sont supprim�s, et ce qui reste est
trait� comme un chemin d'URL. Dans le cas contraire, une
redirection externe vers l'URL indiqu�e est effectu�e. Pour
forcer une redirection externe vers l'h�te local, voir le
drapeau <code>[R]</code> ci-dessous.</dd>
<dt><code>-</code> (tiret)</dt>
<dd>Un tiret indique qu'aucune substitution ne doit �tre
effectu�e (le chemin consid�r� est transmis sans changement).
Ceci est utile quand un drapeau doit �tre appliqu� sans
modifier le chemin (voir ci-dessous).</dd>
</dl>
<p>En plus du texte, la cha�ne <em>Substition</em> peut
comporter :</p>
<ol>
<li>des r�f�rences arri�res (<code>$N</code>) vers le mod�le
d'une directive RewriteRule</li>
<li>des r�f�rences arri�res (<code>%N</code>) vers le dernier
mod�le d'une directive RewriteCond qui correspondait</li>
<li>des variables du serveur comme dans les cha�nes de test de
condition d'une r�gle (<code>%{VARNAME}</code>)</li>
<li>des appels de
<a href="#mapfunc">fonctions de comparaison</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 <code>RewriteCond</code>. Les fonctions de comparaison
sont issues de la directive <code>RewriteMap</code> 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
le fichier de configuration. L'URI du chemin du fichier (voir
ci-dessus <a href="#what_is_matched">Qu'est-ce qui est
compar� ?</a>) est <strong>int�gralement
remplac�e</strong> par la cha�ne de <em>Substitution</em> et le
processus de r��criture se poursuit jusqu'� ce que toutes les
r�gles aient �t� appliqu�es, ou qu'il soit explicitement stopp�
par un drapeau <a href="/rewrite/flags.html#flag_l"><code><strong>L</strong></code></a>,
ou par un autre drapeau qui implique un arr�t imm�diat, comme
<code><strong>END</strong></code> ou
<code><strong>F</strong></code>.</p>
<div class="note"><h3>Modifier la cha�ne de requ�te</h3>
<p>Par d�faut, la cha�ne de requ�te est transmise sans
modification. Vous pouvez cependant cr�er dans la cha�ne de
substitution des URLs dont une partie constitue une cha�ne de
requ�te. Pour cela, ajoutez simplement un point d'interrogation
dans la cha�ne de substitution pour indiquer que le texte qui
suit doit �tre r�inject� dans la cha�ne de requ�te. Pour
supprimer une cha�ne de requ�te, terminez simplement la cha�ne de
substitution par un point d'interrogation. Pour combiner les
nouvelles cha�nes de requ�te avec les anciennes, utilisez le
drapeau <code>[QSA]</code>.</p>
</div>
<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>
comme troisi�me argument de la directive
<code>RewriteRule</code>. 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 href="/rewrite/flags.html">document � propos des drapeaux de
r��criture.</a></p>
<table class="bordered">
<tr><th>Drapeaux et syntaxe</th>
<th>Fonction</th>
</tr>
<tr>
<td>B</td>
<td>Echappe les caract�res non-alphanum�riques <em>avant</em>
d'appliquer la transformation. <em><a href="/rewrite/flags.html#flag_b">d�tails ...</a></em></td>
</tr>
<tr>
<td>chain|C</td>
<td>La r�gle est cha�n�e avec la r�gle suivante. Si la r�gle
�choue, la ou les r�gles avec lesquelles elle est est cha�n�e
seront saut�es. <em><a href="/rewrite/flags.html#flag_c">d�tails ...</a></em></td>
</tr>
<tr>
<td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
<td>D�finit un cookie au niveau du navigateur client. La syntaxe
compl�te est :
CO=<em>NAME</em>:<em>VAL</em>:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>[:<em>secure</em>[:<em>httponly</em>]]]] <em><a href="/rewrite/flags.html#flag_co">details ...</a></em>
<em><a href="/rewrite/flags.html#flag_co">d�tails ...</a></em>
</td>
</tr>
<tr>
<td>discardpath|DPI</td>
<td>Supprime la partie PATH_INFO de l'URI r��crit. <em><a href="/rewrite/flags.html#flag_dpi">d�tails
...</a></em></td>
</tr>
<tr>
<td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
<td>D�finit la variable d'environnement <em>VAR</em> (� la valeur
<em>VAL</em> si elle est fournie). La variante !<em>VAR</em>
annule la d�finition de la variable <em>VAR</em>.<em><a href="/rewrite/flags.html#flag_e">d�tails ...</a></em></td>
</tr>
<tr>
<td>forbidden|F</td>
<td>Renvoie une r�ponse 403 FORBIDDEN au navigateur client.
<em><a href="/rewrite/flags.html#flag_f">d�tails ...</a></em></td>
</tr>
<tr>
<td>gone|G</td>
<td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a href="/rewrite/flags.html#flag_g">d�tails ...</a></em></td>
</tr>
<tr>
<td>Handler|H=<em>Gestionnaire de contenu</em></td>
<td>L'URI r�sultant est envoy� au <em>Gestionnaire de
contenu</em> pour traitement. <em><a href="/rewrite/flags.html#flag_h">d�tails ...</a></em></td>
</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>
</tr>
<tr>
<td>next|N</td>
<td>R�ex�cute le processus de r��criture � partir de la premi�re
r�gle, en utilisant le r�sultat du jeu de r�gles, sous r�serve
qu'il y ait un point de d�part. <em><a href="/rewrite/flags.html#flag_n">d�tails
...</a></em></td>
</tr>
<tr>
<td>nocase|NC</td>
<td>Rend la comparaison entre mod�les insensible � la casse.
<em><a href="/rewrite/flags.html#flag_nc">d�tails ...</a></em></td>
</tr>
<tr>
<td>noescape|NE</td>
<td>Emp�che mod_rewrite d'effectuer un �chappement hexad�cimal
des caract�res sp�ciaux dans le r�sultat de la r��criture. <em><a href="/rewrite/flags.html#flag_ne">d�tails ...</a></em></td>
</tr>
<tr>
<td>nosubreq|NS</td>
<td>La r�gle est saut�e si la requ�te courante est une
sous-requ�te interne. <em><a href="/rewrite/flags.html#flag_ns">d�tails ...</a></em></td>
</tr>
<tr>
<td>proxy|P</td>
<td>Force l'envoi en interne de l'URL de substitution en tant
que requ�te mandataire. <em><a href="/rewrite/flags.html#flag_p">d�tails
...</a></em></td>
</tr>
<tr>
<td>passthrough|PT</td>
<td>L'URI r�sultant est repass� au moteur de mise en
correspondance des URLs pour y �tre trait� par d'autres
traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
<code>Redirect</code>. <em><a href="/rewrite/flags.html#flag_pt">d�tails ...</a></em></td>
</tr>
<tr>
<td>qsappend|QSA</td>
<td>Ajoute toute cha�ne de param�tres cr��e dans la cible de
r��criture � toute cha�ne de param�tres pr�sente dans l'URL de la
requ�te originale. <em><a href="/rewrite/flags.html#flag_qsa">d�tails ...</a></em></td>
</tr>
<tr>
<td>qsdiscard|QSD</td>
<td>Supprime toute cha�ne de param�tres de l'URI entrant. <em><a href="/rewrite/flags.html#flag_qsd">d�tails
...</a></em></td>
</tr>
<tr>
<td>redirect|R[=<em>code</em>]</td>
<td>Force une redirection externe, avec un code de statut HTTP
optionnel. <em><a href="/rewrite/flags.html#flag_r">d�tails ...</a></em>
</td>
</tr>
<tr>
<td>END</td>
<td>Arr�te le processus de r��criture imm�diatement et
n'applique plus aucune r�gle. Emp�che aussi l'ex�cution
ult�rieure de r�gles de r��criture dans des contextes de
r�pertoire et des fichiers .htaccess (disponible depuis la
version 2.3.9) <em><a href="/rewrite/flags.html#flag_l">d�tails ...</a></em></td>
</tr>
<tr>
<td>skip|S=<em>nombre</em></td>
<td>Si la r�gle courante s'applique, le moteur de r��criture
doit sauter les <em>nombre</em> r�gles suivantes. <em><a href="/rewrite/flags.html#flag_s">d�tails ...</a></em></td>
</tr>
<tr>
<td>type|T=<em>MIME-type</em></td>
<td>Force l'attribution du <a class="glossarylink" href="/glossary.html#type-mime" title="voir glossaire">Type-MIME</a>
sp�cifi� au fichier cible. <em><a href="/rewrite/flags.html#flag_t">d�tails ...</a></em></td>
</tr>
</table>
<div class="note"><h3>D�veloppement du r�pertoire home</h3>
<p> Quand la cha�ne de substitution commence par quelque chose comme
"/~user" (de mani�re explicite ou par r�f�rences arri�res), mod_rewrite
d�veloppe le r�pertoire home sans tenir compte de la pr�sence ou de la
configuration du module <code class="module"><a href="/mod/mod_userdir.html">mod_userdir</a></code>.</p>
<p> Ce d�veloppement n'est pas effectu� si le drapeau <em>PT</em> est
utilis� dans la directive <code class="directive"><a href="#rewriterule">RewriteRule</a></code></p>
</div>
<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>
<table class="bordered">
<tr>
<th>R�gle</th>
<th>R�sultat de la substitution</th>
</tr>
<tr>
<td>^/un_chemin(.*) autre_chemin$1</td>
<td>invalide, non support�</td>
</tr>
<tr>
<td>^/un_chemin(.*) autre_chemin$1 [R]</td>
<td>invalide, non support�</td>
</tr>
<tr>
<td>^/un_chemin(.*) autre_chemin$1 [P]</td>
<td>invalide, non support�</td>
</tr>
<tr>
<td>^/un_chemin(.*) /autre_chemin$1</td>
<td>/autre_chemin/info_chemin</td>
</tr>
<tr>
<td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
<td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
</tr>
<tr>
<td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
<td>sans objet, non support�</td>
</tr>
<tr>
<td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
<td>/autre_chemin/info_chemin</td>
</tr>
<tr>
<td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
<td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
</tr>
<tr>
<td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
<td>sans objet, non support�</td>
</tr>
<tr>
<td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
<td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
</tr>
<tr>
<td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
<td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
redondant)</td>
</tr>
<tr>
<td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
<td>http://otherhost/otherpath/pathinfo via internal proxy</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>
<table class="bordered">
<tr>
<th>R�gle</th>
<th>R�sultat de la substitution</th>
</tr>
<tr>
<td>^chemin-local(.*) autre-chemin$1</td>
<td>/chemin/autre-chemin/infochemin</td>
</tr>
<tr>
<td>^chemin-local(.*) autre-chemin$1 [R]</td>
<td>http://cet-hte/chemin/autre-chemin/infochemin via redirection
externe</td>
</tr>
<tr>
<td>^chemin-local(.*) autre-chemin$1 [P]</td>
<td>n'a pas lieu d'�tre, non support�</td>
</tr>
<tr>
<td>^chemin-local(.*) /autre-chemin$1</td>
<td>/autre-chemin/infochemin</td>
</tr>
<tr>
<td>^chemin-local(.*) /autre-chemin$1 [R]</td>
<td>http://cet-hte/autre-chemin/infochemin via redirection externe</td>
</tr>
<tr>
<td>^chemin-local(.*) /autre-chemin$1 [P]</td>
<td>n'a pas lieu d'�tre, non support�</td>
</tr>
<tr>
<td>^chemin-local(.*) http://cet-hte/autre-chemin$1</td>
<td>/autre-chemin/infochemin</td>
</tr>
<tr>
<td>^chemin-local(.*) http://cet-hte/autre-chemin$1 [R]</td>
<td>http://cet-hte/autre-chemin/infochemin via redirection externe</td>
</tr>
<tr>
<td>^chemin-local(.*) http://cet-hte/autre-chemin$1 [P]</td>
<td>n'a pas lieu d'�tre, non support�</td>
</tr>
<tr>
<td>^chemin-local(.*) http://autre h�te/autre-chemin$1</td>
<td>http://autre h�te/autre-chemin/infochemin via redirection externe</td>
</tr>
<tr>
<td>^chemin-local(.*) http://autre h�te/autre-chemin$1 [R]</td>
<td>http://autre h�te/autre-chemin/infochemin via redirection externe
(le drapeau [R] est redondant)</td>
</tr>
<tr>
<td>^chemin-local(.*) http://autre h�te/autre-chemin$1 [P]</td>
<td>http://autre h�te/autre-chemin/infochemin via un mandataire interne</td>
</tr>
</table>
</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="/en/mod/mod_rewrite.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="/fr/mod/mod_rewrite.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2011 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="/faq/">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p></div>
</body></html>