flags.html.fr revision 6ac307024b9ac1219869549636eb03ef6b95a930
<?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">
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>Les drapeaux du module Apache 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" />
<body id="manual-page"><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.3</p>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Les drapeaux du module Apache mod_rewrite</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="/en/rewrite/flags.html" hreflang="en" rel="alternate" title="English"> en </a> |
</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. Vous n'y trouverez pas
une liste exhaustive de tous les drapeaux disponibles, c'est pourquoi
vous devez aussi consulter la documentation de r�f�rence.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#introduction">Introduction</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="tech.html">D�tails techniques</a></li><li><a href="rewrite_guide.html">Guide de r��criture - exemples
avanc�e - exemples utiles avanc�s</a></li></ul></div>
<div class="section">
<h2><a name="introduction" id="introduction">Introduction</a></h2>
<p>Le comportement des directives <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>
<div class="example"><p><code>
RewriteRule mod�le cible [drapeau1,drapeau2,drapeau3]
</code></p></div>
<p>Les drapeaux ont tous une forme courte, comme <code>CO</code>, ainsi
qu'une forme longue, comme <code>cookie</code>. Certains drapeaux
peuvent avoir un ou plusieurs arguments. Les drapeaux sont insensibles �
la casse.</p>
<div class="section">
<h2><a name="flags" id="flags">Les drapeaux</a></h2>
<p>Chaque drapeau poss�de une forme longue et une forme courte. 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.</p>
<p>Chaque drapeau disponible est pr�sent� ici, avec un exemple
d'utilisation.</p>
<h3><a name="flag_c" id="flag_c">C|chain</a></h3>
<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>
<h3><a name="flag_co" id="flag_co">CO|cookie</a></h3>
<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 cinq arguments dont trois sont obligatoires et
deux optionnels.</p>
<p>Vous devez d�clarer un nom et une valeur pour d�finir le cookie,
ainsi que le domaine pour lequel vous souhaitez que le cookie soit
valide. Vous pouvez aussi d�finir la dur�e de vie du cookie, ainsi que
le chemin pour lequel il doit �tre renvoy�.</p>
<p>Par d�faut, la dur�e de vie du cookie correspond � la session du
navigateur en cours.</p>
<p>Par d�faut, le chemin pour lequel le cookie sera valide est "/" -
c'est � dire, pour tout le site web.</p>
<p>Voici un exemple :</p>
<div class="example"><p><code>
RewriteEngine On<br />
RewriteRule ^/index\.html - [CO=frontdoor:yes:.apache.org:1440:/]
</code></p></div>
<p>Cette r�gle ne r��crit pas la requ�te (la cible de r��criture "-"
indique � mod_rewrite de transmettre la requ�te sans modification), mais
d�finit un cookie nomm� 'frontdoor' avec une valeur 'yes'. Le cookie est
dur�e de vie est limit�e � 1440 minutes (24 heures), et il sera renvoy�
pour tous les URIs.</p>
<h3><a name="flag_e" id="flag_e">E|env</a></h3>
<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>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>
<h3><a name="flag_f" id="flag_f">F|forbidden</a></h3>
<p>L'utilisation du drapeau [F] permet de faire envoyer par Apache au
client un code de statut "403 Forbidden". Le m�me effet peut �tre obtenu �
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>
<div class="example"><p><code>
RewriteRule \.exe - [F]
</code></p></div>
<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>
<h3><a name="flag_g" id="flag_g">G|gone</a></h3>
<p>Le drapeau [G] permet de faire envoyer par Apache 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>
<div class="example"><p><code>
RewriteRule ancienne-ressource - [G,NC]
</code></p></div>
<h3><a name="flag_h" id="flag_h">H|handler</a></h3>
<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>
<div class="example"><p><code>
RewriteRule !\. - [H=application/x-httpd-php]
</code></p></div>
<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>
<div class="example"><p><code>
RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
</code></p></div>
<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>
<h3><a name="flag_l" id="flag_l">L|last</a></h3>
<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.</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"><Directory></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"><Directory></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>Dans l'exemple donn� ici, toute requ�te est r��crite en
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>
<div class="example"><p><code>
RewriteCond %{REQUEST_URI} !=index\.php<br />
RewriteRule ^(.*) index.php?req=$1 [L]
</code></p></div>
<h3><a name="flag_n" id="flag_n">N|next</a></h3>
<p>Le drapeau [N] provoque un red�marrage du traitement des r�gles
depuis le d�but ; � 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>
<div class="example"><p><code>
RewriteRule (.*)A(.*) $1B$2 [N]
</code></p></div>
<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>
<h3><a name="flag_nc" id="flag_nc">NC|nocase</a></h3>
<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>
<div class="example"><p><code>
RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]
</code></p></div>
<h3><a name="flag_ne" id="flag_ne">NE|noescape</a></h3>
<p>Par d�faut, les caract�res sp�ciaux, comme <code>&</code> et
<code>?</code>, sont convertis en leur �quivalent
hexad�cimal. Le drapeau [NE] permet d'�viter cette conversion.
</p>
<div class="example"><p><code>
RewriteRule ^/ancre/(.+) /grosse-page.html#$1 [NE,R]
</code></p></div>
<p>
aurait �t� converti en son �quivalent hexad�cimal, <code>%23</code>, ce
qui aurait provoqu� un code d'erreur "404 Not Found".
</p>
<h3><a name="flag_ns" id="flag_ns">NS|nosubreq</a></h3>
<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 peut-�tre pas que
la r��criture s'applique � ces sous-requ�tes.</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>
<h3><a name="flag_p" id="flag_p">P|proxy</a></h3>
<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>
<div class="example"><p><code>
RewriteRule (.*)\.(jpg|gif|png) http://images.exemple.com$1.$2 [P]
</code></p></div>
<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>
<h3><a name="flag_pt" id="flag_pt">PT|passthrough</a></h3>
<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>, 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>
<div class="example"><p><code>
RewriteRule /pics/(.+)\.jpg /icons/$1.gif [PT]
</code></p></div>
<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>
<h3><a name="flag_qsa" id="flag_qsa">QSA|qsappend</a></h3>
<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>
<div class="example"><p><code>
RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
</code></p></div>
<p>Avec le drapeau [QSA], une requ�te pour
autrement dit, la cha�ne de requ�te (<code>query string</code>) existante sera supprim�e.
</p>
<h3><a name="flag_r" id="flag_r">R|redirect</a></h3>
<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)
une redirection sera effectu�e vers cette adresse. Dans le cas contraire,
c'est le nom du serveur local qui sera utilis� pour g�n�rer l'URL envoy�e avec la
redirection.
</p>
<p>
Un code de statut entre 300 et 399 peut �tre sp�cifi�, le code 302 �tant
utilis� par d�faut si aucun code n'est sp�cifi�.
</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
� la r�gle suivante, ce qui provoquera le plus souvent des
avertissements 'Invalid URI in request'.
</p>
<h3><a name="flag_s" id="flag_s">S|skip</a></h3>
<p>Le drapeau [S] sert � sauter des r�gles que vous ne voulez pas voir
ex�cuter. 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>
<div class="example"><p><code>
# La requ�te concerne-t-elle un fichier qui n'existe pas ?<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
# Si c'est la cas, on saute les deux r�gles de r��criture suivantes<br />
RewriteRule .? - [S=2]<br />
<br />
RewriteRule (.*\.gif) images.php?$1<br />
RewriteRule (.*\.html) docs.php?$1
</code></p></div>
<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>, vous pouvez utiliser le drapeau [Skip].</p>
<h3><a name="flag_t" id="flag_t">T|type</a></h3>
<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>
<div class="example"><p><code>
# Sert les fichier .pl en tant que plein texte<br />
</code></p></div>
<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>
<div class="example"><p><code>
# Les fichiers dont le nom contient 'IMG' sont des images jpg.<br />
</code></p></div>
<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"><FilesMatch></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>
</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="/en/rewrite/flags.html" hreflang="en" rel="alternate" title="English"> en </a> |
</div><div id="footer">
<p class="apache">Copyright 2009 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>