flags.html.fr revision 4aa603e6448b99f9371397d439795c91a93637ea
<?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>Les drapeaux de r��criture - 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 rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
<script src="/style/scripts/prettify.min.js" type="text/javascript">
</script>
<link href="/images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/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="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Les drapeaux de r��criture</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="/en/rewrite/flags.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="/fr/rewrite/flags.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
</div>
<p>Ce document d�crit les drapeaux disponibles dans la directive
<code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, en fournissant
des explications d�taill�es et des exemples.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#introduction">Introduction</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_b">B (�chappement dans les r�f�rences arri�res)</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_c">C|chain</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_co">CO|cookie</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_dpi">DPI|discardpath</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_e">E|env</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_end">END</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_f">F|forbidden</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_g">G|gone</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_h">H|handler</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_l">L|last</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_n">N|next</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_nc">NC|nocase</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_ne">NE|noescape</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_ns">NS|nosubreq</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_p">P|proxy</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_pt">PT|passthrough</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_qsa">QSA|qsappend</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_qsd">QSD|qsdiscard</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_r">R|redirect</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_s">S|skip</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#flag_t">T|type</a></li>
</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="/mod/mod_rewrite.html">Documentation du module</a></li><li><a href="intro.html">Introduction � mod_rewrite</a></li><li><a href="remapping.html">Redirection and remise en
correspondance</a></li><li><a href="access.html">Contr�le d'acc�s</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="proxy.html">Mise en cache</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="advanced.html">Techniques avanc�es</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul><ul class="seealso"><li><a href="#comments_section">Commentaires</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="introduction" id="introduction">Introduction</a></h2>
<p>Le comportement d'une directive <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> peut �tre modifi� par un ou
plusieurs drapeaux. Les drapeaux sont situ�s en fin de r�gle, entour�s
de crochets, et s�par�s le cas �ch�ant par des virgules.</p>
<pre class="prettyprint lang-config">RewriteRule pattern target [Flag1,Flag2,Flag3]</pre>
<p>Chaque drapeau (� quelques exceptions pr�s)
poss�de une forme courte, comme <code>CO</code>, ainsi qu'une forme longue,
comme <code>cookie</code>. Bien que
la forme courte soit la plus couramment utilis�e, nous vous recommandons
de vous familiariser avec les drapeaux sous leur forme longue, afin de
bien m�moriser ce que chaque drapeau est suppos� faire.
Certains drapeaux acceptent un ou plusieurs arguments. Les drapeaux ne
sont pas sensibles � la casse.</p>
<p>Les drapeaux qui modifient les m�tadonn�es associ�es � la requ�te
(T=, H=, E=) n'ont aucun effet dans un contexte de r�pertoire ou de
fichier htaccess, lorsqu'une substitution (autre que '-') est effectu�e
au cours de la m�me passe du processus de r��criture.
</p>
<p>Chaque drapeau disponible est pr�sent� ici, avec un exemple
d'utilisation.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_b" id="flag_b">B (�chappement dans les r�f�rences arri�res)</a></h2>
<p>Avec le drapeau [B], la directive <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> �chappe les caract�res
non-alphanum�riques avant d'appliquer la transformation.</p>
<p><code>mod_rewrite</code> doit supprimer les s�quences d'�chappement
des URLs avant leur
mise en correspondance avec le syst�me de fichiers ; les s�quences
d'�chappement sont donc supprim�es des r�f�rences arri�res au moment o�
ces derni�res sont appliqu�es. Avec le drapeau B, les caract�res
non-alphanum�riques des r�f�rences arri�res seront �chapp�s. Consid�rons
par exemple cette r�gle :</p>
<pre class="prettyprint lang-config">RewriteRule ^search/(.*)$ /search.php?term=$1</pre>
<p>Soit le terme de recherche 'x &amp; y/z' ; un navigateur va le coder
en 'x%20%26%20y%2Fz', transformant la requ�te en
'search/x%20%26%20y%2Fz'. Sans le drapeau B, cette r�gle de r��criture
va r��crire la requ�te en 'search.php?term=x &amp; y/z', ce qui ne
correspond pas � une URL valide et cette derni�re sera encod�e en
<code>search.php?term=x%20&amp;y%2Fz=</code>, ce qui ne correspond pas �
ce que l'on souhaitait.</p>
<p>Avec le drapeau B, les param�tres sont r�encod�s avant d'�tre pass�s
� l'URL r�sultante, ce qui fournit une r��criture correcte en
<code>/search.php?term=x%20%26%20y%2Fz</code>.</p>
<p>Notez que vous devrez peut-�tre aussi d�finir la
directive <code class="directive"><a href="/mod/core.html#allowencodedslashes">AllowEncodedSlashes</a></code>
� <code>On</code> pour
que cet exemple particulier fonctionne, car httpd ne permet pas les
slashes encod�s dans les URLs, et renvoie une erreur 404 s'il en
rencontre un.</p>
<p>Ce processus d'�chappement est en particulier n�cessaire dans le
contexte d'un mandataire, o� l'acc�s au serveur d'arri�re-plan �chouera
si on pr�sente � ce dernier une URL non �chapp�e.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_c" id="flag_c">C|chain</a></h2>
<p>Le drapeau [C] ou [chain] indique que la r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est cha�n�e avec la
suivante. Autrement dit, si la r�gle s'applique, elle est trait�e
normalement et passe le contr�le � la r�gle suivante. Par contre, si
elle ne s'applique pas, la r�gle suivante, ainsi que toutes les r�gles
cha�n�es qui suivent, seront saut�es.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_co" id="flag_co">CO|cookie</a></h2>
<p>Le drapeau [CO], ou [cookie], vous permet de d�finir un cookie
lorsqu'une r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>
s'applique. Il poss�de trois arguments obligatoires et
quatre arguments optionnels.</p>
<p>La syntaxe compl�te de ce drapeau, avec tous ses attributs, est la
suivante :</p>
<div class="example"><p><code>
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
</code></p></div>
<p>Vous devez d�clarer un nom, une valeur et un domaine pour que
le cookie puisse �tre d�fini.</p>
<dl>
<dt>Domain</dt>
<dd>Le domaine pour lequel vous souhaitez que le cookie soit valide. Ce
peut �tre un nom de serveur, comme <code>www.example.com</code>, ou un
domaine, comme <code>.example.com</code>. Il doit comporter au moins
deux parties s�par�es par un point. C'est � dire que vous ne pouvez pas
utiliser les valeurs <code>.com</code> ou <code>.net</code>. En effet,
ce style de cookie est interdit par le mod�le de s�curit� des cookies.</dd>
</dl>
<p>Vous pouvez aussi d�finir les valeurs suivantes :</p>
<dl>
<dt>Lifetime</dt>
<dd>La dur�e de vie du cookie, en minutes.</dd>
<dd>Une valeur de 0 indique une dur�e de vie correspondant � la session
courante du navigateur. Il s'agit de la valeur par d�faut.</dd>
<dt>Path</dt>
<dd>Le chemin, sur le site web concern�, pour lequel le cookie est
valide, du style <code>/clients/</code> or
<code>/fichiers/telechargement/</code>.</dd>
<dd>La valeur par d�faut est <code>/</code> - c'est � dire l'ensemble du
site web.</dd>
<dt>Secure</dt>
<dd>Si cet argument a pour valeur <code>secure</code>,
<code>true</code>, ou <code>1</code>, le cookie ne pourra �tre transmis
que dans le cadre d'une connexion s�curis�e (https).</dd>
<dt>httponly</dt>
<dd>Si cet argument a pour valeur <code>HttpOnly</code>,
<code>true</code>, ou <code>1</code>, le cookie aura son drapeau
<code>HttpOnly</code> activ�, ce qui signifie qu'il sera inaccessible au
code JavaScript pour les navigateurs qui supportent cette
fonctionnalit�.</dd>
</dl>
<p>Voici un exemple :</p>
<pre class="prettyprint lang-config">RewriteEngine On
RewriteRule ^/index\.html - [CO=frontdoor:yes:.example.org:1440:/]</pre>
<p>Dans l'exemple ci-dessus, la r�gle ne r��crit
pas la requ�te. La cible de r��criture "-"
indique � mod_rewrite de transmettre la requ�te sans
modification. Par contre, il
d�finit un cookie nomm� 'frontdoor' avec une valeur 'yes'. Le cookie est
valide pour tout h�te situ� dans le domaine <code>.example.org</code>. Sa
dur�e de vie est limit�e � 1440 minutes (24 heures), et il sera renvoy�
pour tous les URIs.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_dpi" id="flag_dpi">DPI|discardpath</a></h2>
<p>Avec le drapeau DPI, la partie PATH_INFO de l'URI
r��crit est supprim�e.</p>
<p>Ce drapeau est disponible dans les versions 2.2.12 et sup�rieures.</p>
<p>Dans un contexte de r�pertoire, l'URI mis en comparaison par chaque
r�gle <code class="directive">RewriteRule</code> est la concat�nation des
valeurs courantes de l'URI et de PATH_INFO.</p>
<p>L'URI courant peut �tre l'URI initial tel qu'il a �t� fourni par le
client, le r�sultat d'une passe pr�c�dente du processus de r��criture,
ou le r�sultat de la r�gle pr�c�dente dans le processus courant de
r��criture.</p>
<p>Par contre, la partie PATH_INFO ajout�e � l'URI avant chaque r�gle ne
refl�te que la valeur de PATH_INFO avant la passe courante du processus
de r��criture. En cons�quence, si de larges portions de l'URI
correspondent et sont traduites via plusieurs directives
<code class="directive">RewriteRule</code>, sans prendre en compte
quelles parties de l'URI provenaient du PATH_INFO courant, l'URI final
pourra se voir ajouter plusieurs copies de PATH_INFO.</p>
<p>Utilisez ce drapeau pour toute substitution o� la pr�sence du PATH_INFO qui
r�sultait de la mise en correspondance pr�c�dente de cette requ�te avec
le syst�me de fichier n'est pas n�cessaire. Avec ce drapeau, le
PATH_INFO �tabli avant que cette passe du processus de r��criture ne
d�bute est oubli�. PATH_INFO ne sera pas recalcul� tant que la passe
courante du processus de r��criture ne sera pas achev�e. Les r�gles
suivantes de cette passe ne verront que le r�sultat direct des
substitutions, sans aucun PATH_INFO ajout�.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_e" id="flag_e">E|env</a></h2>
<p>Avec le drapeau [E], ou [env], vous pouvez d�finir la valeur d'une
variable d'environnement. Notez que certaines variables d'environnement
peuvent �tre d�finies apr�s le traitement de la r�gle, annulant par
la-m�me ce que vous avez d�fini. Voir le <a href="/env.html">document
sur les variables d'environnement</a> pour plus de d�tails sur le
fonctionnement des variables d'environnement.</p>
<p>La syntaxe compl�te pour ce drapeau est :</p>
<div class="example"><p><code>
[E=!VAR]
</code></p></div>
<p><code>VAL</code> peut comporter des r�f�rences arri�res
(<code>$N</code> ou <code>%N</code>) qui seront d�velopp�es.</p>
<p>En utilisant la version courte</p>
<div class="example"><p><code>
[E=VAR]
</code></p></div>
<p>vous pouvez d�finir la variable d'environnement nomm�e
<code>VAR</code> avec une valeur vide.</p>
<p>La forme</p>
<div class="example"><p><code>
[E=!VAR]
</code></p></div>
<p>permet d'annuler la d�finition de la variable <code>VAR</code>.</p>
<p>Les variables d'environnement s'emploient dans diff�rents contextes,
comme les programmes CGI, d'autres directives RewriteRule, ou des
directives CustomLog.</p>
<p>L'exemple suivant d�finit une variable d'environnement nomm�e 'image'
avec une valeur de '1' si l'URI de la requ�te correspond � un fichier
image. Cette variable d'environnement est ensuite utilis�e pour exclure
une telle requ�te du journal des acc�s.</p>
<div class="example"><p><code>
RewriteRule \.(png|gif|jpg) - [E=image:1]<br />
CustomLog logs/access_log combined env=!image
</code></p></div>
<p>Notez que le m�me effet peut �tre obtenu � l'aide de la directive
<code class="directive"><a href="/mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>. Cette technique
est pr�sent�e � titre d'exemple et non de recommandation.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_end" id="flag_end">END</a></h2>
<p>L'utilisation du drapeau [END] permet non seulement de terminer le
processus de r��criture en cours (comme [L]), mais aussi d'emp�cher tout
processus de r��criture ult�rieur dans un contexte de r�pertoire
(htaccess).</p>
<p>Ceci ne s'applique pas aux nouvelles requ�tes r�sultant d'une
redirection externe.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_f" id="flag_f">F|forbidden</a></h2>
<p>L'utilisation du drapeau [F] permet de faire envoyer par le serveur au
client un code de statut "403 Forbidden". Le m�me effet peut �tre obtenu �
l'aide de la directive <code class="directive"><a href="/mod/mod_access_compat.html#deny">Deny</a></code>,
mais ce drapeau offre plus de souplesse dans l'attribution d'un statut
Forbidden.</p>
<p>La r�gle suivante va interdire la t�l�chargement de fichiers
<code>.exe</code> depuis votre serveur.</p>
<pre class="prettyprint lang-config">RewriteRule \.exe - [F]</pre>
<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
raison de r��crire un URI, si vous avez l'intention d'interdire la
requ�te.</p>
<p>Lorsqu'on utilise [F], [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>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_g" id="flag_g">G|gone</a></h2>
<p>Le drapeau [G] permet de faire envoyer par le serveur un code de statut
"410 Gone" avec la r�ponse. Ce code indique qu'une ressource qui �tait
disponible auparavant ne l'est plus actuellement.</p>
<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>
<pre class="prettyprint lang-config">RewriteRule oldproduct - [G,NC]</pre>
<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>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_h" id="flag_h">H|handler</a></h2>
<p>Force le traitement de la requ�te r�sultante par le gestionnaire
sp�cifi�. Par exemple, on peut utiliser ce drapeau pour forcer
l'interpr�tation de tous les fichiers sans extension par le gestionnaire
php :</p>
<pre class="prettyprint lang-config">RewriteRule !\. -
[H=application/x-httpd-php]</pre>
<p>
L'expression rationnelle ci-dessus - <code>!\.</code> - correspond �
toute requ�te qui ne contient pas le caract�re <code>.</code>.
</p>
<p>On peut aussi utiliser ce drapeau pour forcer l'utilisation d'un
certain gestionnaire en fonction de certaines conditions. Par exemple,
l'extrait suivant utilis� dans un contexte de niveau serveur permet de
faire en sorte que les fichiers <code>.php</code> soient
<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>
<pre class="prettyprint lang-config">RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]</pre>
<p>L'expression rationnelle ci-dessus -
<code>^(/source/.+\.php)s$</code> - va correspondre � toute requ�te qui
d�butera par <code>/source/</code>, continuera par 1 ou n caract�res
puis par <code>.phps</code>. La r�f�rence arri�re $1 fait r�f�rence � la
correspondance captur�e entre parenth�ses de l'expression
rationnelle.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_l" id="flag_l">L|last</a></h2>
<p>Lorsque le drapeau [L] est pr�sent, <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>
arr�te le traitement du jeu de r�gles. Cela signifie dans la plupart des
situations que si la r�gle s'applique, aucune autre r�gle ne sera
trait�e. Ce drapeau correspond � la commande Perl <code>last</code>, ou
� la commande <code>break</code> en C. Utilisez ce drapeau pour indiquer
que la r�gle courante doit �tre appliqu�e imm�diatement, sans tenir
compte des r�gles ult�rieures.</p>
<p>Si vous utilisez des r�gles <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans des fichiers
<code>.htaccess</code> ou des sections <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code>, il est important d'avoir quelques
notions sur la mani�re dont les r�gles sont trait�es. Pour simplifier,
une fois les r�gles trait�es, la requ�te r��crite est pass�e � nouveau
au moteur d'interpr�tation des URLs afin que ce dernier puisse la
traiter. Il est possible qu'au cours du traitement de la requ�te
r��crite, le fichier <code>.htaccess</code> ou la section <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> soient � nouveau
rencontr�s, entra�nant un nouveau traitement du jeu de r�gles depuis le
d�but. Cette situation se pr�sente le plus souvent lorsqu'une des r�gles
provoque une redirection - interne ou externe - ce qui r�initialise le
traitement de la requ�te.</p>
<p>Si vous utilisez des directives <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans un de ces contextes,
il importe par cons�quent de pr�voir explicitement des �tapes permettant
d'�viter un bouclage infini sur les r�gles,
et de ne pas compter seulement sur
le drapeau [L] pour terminer l'ex�cution d'une s�rie de r�gles, comme
d�crit ci-dessous.</p>
<p>Un autre drapeau, [END], permet non seulement d'interrompre le cycle
courant du processus de r��criture, mais aussi d'emp�cher toute
r��criture ult�rieure dans le contexte de r�pertoire (htaccess). Ceci ne
s'applique pas aux nouvelles requ�tes r�sultant de redirections
externes.</p>
<p>Dans l'exemple donn� ici, toute requ�te est r��crite en
<code>index.php</code>, la requ�te originale �tant ajout�e comme cha�ne
de requ�te en argument � <code>index.php</code> ; cependant, la
directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> permet de s'assurer que si
la requ�te concerne d�j� <code>index.php</code>, la directive <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> sera saut�e.</p>
<pre class="prettyprint lang-config">RewriteBase /
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^(.*) /index.php?req=$1 [L,PT]</pre>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_n" id="flag_n">N|next</a></h2>
<p>Le drapeau [N] provoque un red�marrage du traitement des r�gles
depuis le d�but, en utilisant le r�sultat du jeu de r�gles, sous
r�serve qu'il existe un point de d�marrage ; � utiliser avec pr�cautions
car il peut provoquer un bouclage infini.
</p>
<p>
Le drapeau [Next] peut servir, par exemple,
� remplacer de mani�re r�p�titive
une cha�ne de caract�re ou une lettre dans une requ�te. Dans l'exemple
suivant, chaque occurence de A sera remplac�e par B dans la requ�te, et
ceci jusqu'il n'y ait plus de A � remplacer.
</p>
<pre class="prettyprint lang-config">RewriteRule (.*)A(.*) $1B$2 [N]</pre>
<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 �
dire, tant que l'URI contient un <code>A</code>),
effectuer la substitution (c'est � dire, remplacer le <code>A</code> par
un <code>B</code>).</p>
<p>A partir de la version 2.5.0, ce module renvoie une erreur apr�s
10000 it�rations afin d'�viter les boucles infinies. Ce nombre maximum
d'it�ration peut �tre modifi� via le drapeau N.</p>
<pre class="prettyprint lang-config"># On veut remplacer 1 caract�re � chaque it�ration de la boucle
RewriteRule (.+)[&gt;&lt;;]$ $1 [N=32000]
# ... ou s'arr�ter apr�s 10 it�rations
RewriteRule (.+)[&gt;&lt;;]$ $1 [N=10]</pre>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_nc" id="flag_nc">NC|nocase</a></h2>
<p>Avec le drapeau [NC], le mod�le de la r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est compar� � la requ�te de
mani�re insensible � la casse. C'est � dire que cette comparaison
s'effectue sans tenir compte des majuscules/minuscules dans l'URI
compar�.</p>
<p>Dans l'exemple suivant, toute requ�te pour un fichier image sera
transmise par Apache � votre serveur d'images d�di�. La correspondance est
insensible � la casse, si bien que par exemple, <code>.jpg</code> aussi
bien que <code>.JPG</code> seront accept�s.</p>
<pre class="prettyprint lang-config">RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]</pre>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_ne" id="flag_ne">NE|noescape</a></h2>
<p>Par d�faut, les caract�res sp�ciaux, comme <code>&amp;</code> et
<code>?</code>, sont convertis en leur �quivalent
hexad�cimal. Le drapeau [NE] permet d'�viter cette conversion.
</p>
<pre class="prettyprint lang-config">RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]</pre>
<p>
Dans l'exemple ci-dessus, <code>/anchor/xyz</code> est r��crit en
<code>/bigpage.html#xyz</code>. En l'absence du drapeau [NE], le #
aurait �t� converti en son �quivalent hexad�cimal, <code>%23</code>, ce
qui aurait provoqu� un code d'erreur "404 Not Found".
</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_ns" id="flag_ns">NS|nosubreq</a></h2>
<p>Le drapeau [NS] emp�che la r�gle de s'appliquer aux sous-requ�tes.
Par exemple, une page incluse au moyen d'une SSI (Server
Side Include) est une sous-requ�te, et vous ne voudrez probablement pas que
la r��criture s'applique � ces sous-requ�tes. Ainsi, lorsque
<code class="module"><a href="/mod/mod_dir.html">mod_dir</a></code> recherche des informations � propos des
fichiers par d�faut du r�pertoire (comme les fichiers
<code>index.html</code>), il s'agit d'une sous-requ�te interne, et vous
ne d�sirez en g�n�ral pas que ces sous-requ�tes soient r��crites. Cette
r��criture
n'est pas toujours utile pour les sous-requ�tes, et peut m�me causer des
erreurs si l'ensemble du jeu de r�gles est appliqu�. L'utilisation de
ce drapeau permet d'exclure les r�gles qui peuvent poser probl�me.</p>
<p>Comment d�terminer si vous devez utiliser cette r�gle ou non : si
vous pr�fixez les URLs avec des scripts CGI, afin de forcer leur
traitement par le script CGI, vous vous exposez � des probl�mes (ou du
moins � une surcharge significative) avec les sous-requ�tes. Dans ces
cas, vous devez utiliser ce drapeau.</p>
<p>
Les images, scripts java, ou fichiers css, charg�s en tant que partie
d'une page html, ne sont pas des sous-requ�tes - le navigateur les
appelle sous forme de requ�tes HTTP � part enti�re.
</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_p" id="flag_p">P|proxy</a></h2>
<p>L'utilisation du drapeau [P] entra�ne le traitement de la requ�te par
le module <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>, et ceci via une requ�te de
mandataire. Par exemple, si vous voulez que toutes les requ�tes d'images
soient trait�es par un serveur d'images annexe, vous pouvez utiliser
une r�gle de ce style :</p>
<pre class="prettyprint lang-config">RewriteRule /(.*)\.(jpg|gif|png)$ http://images.example.com/$1.$2 [P]</pre>
<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
toute r�gle ult�rieure sera ignor�e.</p>
<p>
Vous devez vous assurer que la cha�ne de substitution soit un URI valide
(commen�ant typiquement par <code>http://</code><em>nom-serveur</em>)
qui puisse �tre trait�e par le module <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>. Dans
le cas contraire, le module mandataire vous renverra une erreur.
L'utilisation de ce drapeau impl�mente de mani�re plus puissante la
directive <code class="directive"><a href="/mod/mod_proxy.html#proxypass">ProxyPass</a></code>, pour
faire correspondre le contenu distant � l'espace de nommage du serveur
local.</p>
<div class="warning">
<h3>Avertissement � propos de la s�curit�</h3>
<p>Lors de la construction de l'URL cible de la r�gle, il convient
de prendre en compte l'impact en mati�re de s�curit� qu'aura le
fait de permettre au client d'influencer le jeu d'URLs pour
lesquelles votre serveur agira en tant que mandataire.
Assurez-vous que la partie protocole://nom-serveur de l'URL soit
fixe, ou ne permette pas au client de l'influencer induement.</p>
</div>
<div class="warning">
<h3>Avertissement au sujet des performances</h3>
<p>Utiliser ce drapeau fait intervenir <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code> sans la gestion des connexions
persistantes, ce qui signifie que vous obtiendrez des performances meilleurs si vous utilisez
<code class="directive"><a href="/mod/mod_proxy.html#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="/mod/mod_proxy.html#proxypassmatch">ProxyPassMatch</a></code>.</p>
<p>Ceci est du au fait que ce drapeau induit l'utilisation du worker par d�faut, qui
ne g�re pas la mise en commun des connexions.</p>
<p>Partout o� cela est possible, pr�f�rez l'utilisation de ces directives.</p>
</div>
<p>Note: <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code> doit �tre activ� pour pouvoir
utiliser ce drapeau.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_pt" id="flag_pt">PT|passthrough</a></h2>
<p>
Par d�faut, la cible (ou cha�ne de substitution) d'une r�gle
RewriteRule est sens�e �tre un chemin de fichier. Avec le drapeau [PT],
par contre, elle est trait�e comme un URI. Autrement dit, avec le
drapeau [PT], le r�sultat de la r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est pass� � nouveau au
syst�me de mise en correspondance des URLs avec le syst�me de fichiers,
de fa�on � ce que les syst�mes de mise en correspondance bas�s sur les
chemins de fichiers, comme la directive <code class="directive"><a href="/mod/mod_alias.html#alias">Alias</a></code>, <code class="directive"><a href="/mod/mod_alias.html#redirect">Redirect</a></code>, ou <code class="directive"><a href="/mod/mod_alias.html#scriptalias">ScriptAlias</a></code>, par exemple, puissent avoir une
chance d'accomplir leur t�che.
</p>
<p>
Si par exemple, vous avez un <code class="directive"><a href="/mod/mod_alias.html#alias">Alias</a></code> pour /icons, et une r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> qui renvoie vers /icons,
vous devez utiliser le drapeau [PT] pour �tre s�r que l'<code class="directive"><a href="/mod/mod_alias.html#alias">Alias</a></code> sera bien �valu�.
</p>
<pre class="prettyprint lang-config">Alias /icons /usr/local/apache/icons
RewriteRule /pics/(.+)\.jpg$ /icons/$1.gif [PT]</pre>
<p>
Dans l'exemple pr�c�dent, en l'absence du drapeau [PT], l'Alias aurait
�t� ignor�, ce qui aurait provoqu� une erreur 'File not found'.
</p>
<p>Avec le drapeau <code>PT</code>, le drapeau <code>L</code> est
implicite : la r��criture s'arr�tera afin de transmettre la requ�te � la
phase suivante du traitement.</p>
<p>Notez que le drapeau <code>PT</code> est implicite dans des contextes
de r�pertoire comme les sections <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> ou les fichiers
<code>.htaccess</code>. Le seul moyen de contourner ceci consiste �
r��crire vers <code>-</code>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_qsa" id="flag_qsa">QSA|qsappend</a></h2>
<p>
Quand l'URI de remplacement contient une cha�ne de requ�te, le
comportement par d�faut de la r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est de supprimer la <code>
query string</code> (il s'agit des param�tres �ventuellement pass�s dans l'URL apr�s le
caract�re <code>?</code>, usuellement pour les formulaires trait�s par la
m�thode HTTP <code>GET</code>) existante, et de la remplacer par celle nouvellement cr��e.
Avec le drapeau [QSA], les cha�nes de requ�te peuvent �tre combin�es.
</p>
<p>Consid�rons la r�gle suivante :</p>
<pre class="prettyprint lang-config">RewriteRule /pages/(.+) /page.php?page=$1
[QSA]</pre>
<p>Avec le drapeau [QSA], une requ�te pour
<code>/pages/123?one=two</code> sera r��crite en
<code>/page.php?page=123&amp;one=two</code>. Sans le drapeau [QSA], la
m�me requ�te sera r��crite en <code>/page.php?page=123</code> -
autrement dit, la cha�ne de requ�te (<code>query string</code>) existante sera supprim�e.
</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_qsd" id="flag_qsd">QSD|qsdiscard</a></h2>
<p>
Lorsque l'URI de la requ�te contient une cha�ne de param�tres, et si
l'URI cible n'en contient pas, le comportement par d�faut de la
directive <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> consiste � copier cette
cha�ne de param�tres dans l'URI cible. Avec le drapeau [QSD], la cha�ne
de param�tres est supprim�e.
</p>
<p>Ce drapeau est disponible dans les versions 2.4.0 et sup�rieures.</p>
<p>
Lorsque les drapeaux [QSD] et [QSA] sont utilis�s ensemble, c'est le
drapeau [QSD] qui l'emporte.
</p>
<p>
Si l'URI cible poss�de une cha�ne de param�tres, le comportement par
d�faut sera respect� - c'est � dire que la cha�ne de param�tres
originale sera supprim�e et remplac�e par la cha�ne de param�tres de
l'URI cible.
</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_r" id="flag_r">R|redirect</a></h2>
<p>
L'utilisation du drapeau [R] provoque l'envoi d'une redirection au
navigateur. Si une URL pleinement qualifi�e (FQDN - fully qualified domain name)
est sp�cifi�e (c'est � dire incluant <code>http://nom-du-serveur/</code>),
une redirection sera effectu�e vers cette adresse. Dans le cas contraire,
le protocole courant, le nom du serveur et le num�ro de port seront
utilis�s pour g�n�rer l'URL envoy�e avec la redirection.
</p>
<p><em>Tout</em> code de statut de r�ponse HTTP valide peut �tre
sp�cifi�, en utilisant la syntaxe [R=305], le code de statut 302 �tant
utilis� par d�faut si aucun code n'est sp�cifi�. Le code de statut
sp�cifi� n'est pas n�cessairement un code de statut
de redirection (3xx). Cependant, si le code de statut est en dehors de la plage des codes de
redirection (300-399), la cha�ne de substitution est enti�rement
supprim�e, et la r��criture s'arr�te comme si le drapeau <code>L</code>
�tait utilis�.</p>
<p>En plus des codes de statut de r�ponse, vous pouvez sp�cifier les
codes de redirection en utilisant leurs noms symboliques :
<code>temp</code> (d�faut), <code>permanent</code>, ou
<code>seeother</code>.</p>
<p>
Vous utiliserez presque toujours [R] en conjonction avec [L] (c'est �
dire [R,L]), car employ� seul, le drapeau [R] pr�fixe l'URI avec
<code>http://cet-h�te[:ce-port]</code>, mais passe ensuite cette adresse
� la r�gle suivante, ce qui provoquera le plus souvent des
avertissements 'Invalid URI in request'.
</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_s" id="flag_s">S|skip</a></h2>
<p>Le drapeau [S] sert � sauter des r�gles que vous ne voulez pas voir
ex�cuter. La syntaxe du drapeau [S] est [S=<em>N</em>], o�
<em>N</em> correspond au nombre de r�gles � sauter (sous
r�serve que la r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> corresponde et qu'au moins
une condition <code class="directive"><a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>
pr�alable soit v�rifi�e).
Ceci peut s'interpr�ter comme une instruction
<code>goto</code> dans votre jeu de r�gles de r��criture. Dans
l'exemple suivant, nous ne voulons ex�cuter la r�gle <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> que si l'URI demand� ne
correspond pas � un fichier existant.</p>
<pre class="prettyprint lang-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</pre>
<p>Cette technique trouve son utilit� dans le fait qu'une directive
<code class="directive"><a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> ne s'applique
qu'� la r�gle qui la suit imm�diatement. Ainsi, si vous voulez
qu'une directive <code>RewriteCond</code> s'applique � plusieurs r�gles
<code>RewriteRule</code>, une technique possible consiste � inverser ces
conditions et ajouter une <code>RewriteRule</code> avec le drapeau [Skip]. Cette technique permet
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>
<pre class="prettyprint lang-config"># Est-ce que le fichier existe ?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.
RewriteRule .? - [S=3]
# Si le fichier existe, alors :
RewriteRule (.*\.gif) images.php?$1
RewriteRule (.*\.html) docs.php?$1
# Skip past the "else" stanza.
RewriteRule .? - [S=1]
# ELSE...
RewriteRule (.*) 404.php?file=$1
# END</pre>
<p>Il est probablement plus ais� de d�finir ce genre de configuration
via les directives <code class="directive">&lt;If&gt;</code>, <code class="directive">&lt;ElseIf&gt;</code>, et <code class="directive">&lt;Else&gt;</code>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_t" id="flag_t">T|type</a></h2>
<p>D�finit le type MIME de la r�ponse r�sultante renvoy�e. L'effet est
identique � celui de la directive <code class="directive"><a href="/mod/mod_mime.html#addtype">AddType</a></code>.</p>
<p>Par exemple, vous pouvez utiliser la technique suivante pour servir
du code source Perl en tant que plein texte, s'il est requis d'une
certaine mani�re :</p>
<pre class="prettyprint lang-config"># Sert les fichier .pl en tant que plein texte
RewriteRule \.pl$ - [T=text/plain]</pre>
<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>
<pre class="prettyprint lang-config"># Les fichiers dont le nom contient 'IMG' sont des images jpg.
RewriteRule IMG - [T=image/jpg]</pre>
<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 <code class="directive"><a href="/mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>. Il faut toujours
envisager la possibilit� d'une solution alternative � un probl�me avant
d'avoir recours � la r��criture, qui sera toujours moins efficace qu'une
solution alternative.</p>
<p>
Dans un contexte de niveau r�pertoire, n'utilisez que <code>-</code>
(tiret) comme substitution, <em>dans toute la s�quence de r��criture de
mod_rewrite</em>, sinon le type MIME d�fini avec ce drapeau
sera perdu suite � un retraitement interne (y compris les s�quences de
r��criture suivantes de mod_rewrite). Dans ce contexte, vous pouvez
utiliser le drapeau <code>L</code> pour terminer la s�quence
<em>courante</em> de r��criture de mod_rewrite.</p>
</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="/en/rewrite/flags.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="/fr/rewrite/flags.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/rewrite/flags.html';
(function(w, d) {
if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
d.write('<div id="comments_thread"><\/div>');
var s = d.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
}
else {
d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
}
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2014 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/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
prettyPrint();
}
//--><!]]></script>
</body></html>