<-
Apache > Serveur HTTP > Documentation > Version 2.4 > Rewrite

Les drapeaux de r��criture

Langues Disponibles:  en  |  fr 

Ce document d�crit les drapeaux disponibles dans la directive RewriteRule, en fournissant des explications d�taill�es et des exemples.

Voir aussi

top

Introduction

Le comportement d'une directive RewriteRule 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.

RewriteRule pattern target [Flag1,Flag2,Flag3]

Chaque drapeau (� quelques exceptions pr�s) poss�de une forme courte, comme CO, ainsi qu'une forme longue, comme cookie. 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.

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.

Chaque drapeau disponible est pr�sent� ici, avec un exemple d'utilisation.

top

B (�chappement dans les r�f�rences arri�res)

Avec le drapeau [B], la directive RewriteRule �chappe les caract�res non-alphanum�riques avant d'appliquer la transformation.

mod_rewrite 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 :

RewriteRule "^search/(.*)$" "/search.php?term=$1"

Soit le terme de recherche 'x & 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 & y/z', ce qui ne correspond pas � une URL valide et cette derni�re sera encod�e en search.php?term=x%20&y%2Fz=, ce qui ne correspond pas � ce que l'on souhaitait.

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 /search.php?term=x%20%26%20y%2Fz.

RewriteRule "^search/(.*)$" "/search.php?term=$1" [B,PT]

Notez que vous devrez peut-�tre aussi d�finir la directive AllowEncodedSlashes � On 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.

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.

top

C|chain

Le drapeau [C] ou [chain] indique que la r�gle RewriteRule 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.

top

CO|cookie

Le drapeau [CO], ou [cookie], vous permet de d�finir un cookie lorsqu'une r�gle RewriteRule s'applique. Il poss�de trois arguments obligatoires et quatre arguments optionnels.

La syntaxe compl�te de ce drapeau, avec tous ses attributs, est la suivante :

[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]

Si un caract�re litt�ral ':' doit �tre ins�rer dans un des champs du cookie, une autre syntaxe est disponible. Pour utiliser cette syntaxe alternative, le contenu du champ "Name" doit �tre pr�c�d� du caract�re ';', et les s�pateurs de champs deviendront des ';'.

[CO=;NAME;VALUE:MOREVALUE;DOMAIN;lifetime;path;secure;httponly]

Vous devez d�clarer un nom, une valeur et un domaine pour que le cookie puisse �tre d�fini.

Domain
Le domaine pour lequel vous souhaitez que le cookie soit valide. Ce peut �tre un nom de serveur, comme www.example.com, ou un domaine, comme .example.com. Il doit comporter au moins deux parties s�par�es par un point. C'est � dire que vous ne pouvez pas utiliser les valeurs .com ou .net. En effet, ce style de cookie est interdit par le mod�le de s�curit� des cookies.

Vous pouvez aussi d�finir les valeurs suivantes :

Lifetime
La dur�e de vie du cookie, en minutes.
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.
Path
Le chemin, sur le site web concern�, pour lequel le cookie est valide, du style /clients/ or /fichiers/telechargement/.
La valeur par d�faut est / - c'est � dire l'ensemble du site web.
Secure
Si cet argument a pour valeur secure, true, ou 1, le cookie ne pourra �tre transmis que dans le cadre d'une connexion s�curis�e (https).
httponly
Si cet argument a pour valeur HttpOnly, true, ou 1, le cookie aura son drapeau HttpOnly activ�, ce qui signifie qu'il sera inaccessible au code JavaScript pour les navigateurs qui supportent cette fonctionnalit�.

Voici un exemple :

RewriteEngine On
RewriteRule "^/index\.html" "-" [CO=frontdoor:yes:.example.org:1440:/]

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 .example.org. Sa dur�e de vie est limit�e � 1440 minutes (24 heures), et il sera renvoy� pour tous les URIs.

top

DPI|discardpath

Avec le drapeau DPI, la partie PATH_INFO de l'URI r��crit est supprim�e.

Ce drapeau est disponible dans les versions 2.2.12 et sup�rieures.

Dans un contexte de r�pertoire, l'URI mis en comparaison par chaque r�gle RewriteRule est la concat�nation des valeurs courantes de l'URI et de PATH_INFO.

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.

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 RewriteRule, 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.

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�.

top

E|env

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 document sur les variables d'environnement pour plus de d�tails sur le fonctionnement des variables d'environnement.

La syntaxe compl�te pour ce drapeau est :

[E=!VAR]

VAL peut comporter des r�f�rences arri�res ($N ou %N) qui seront d�velopp�es.

En utilisant la version courte

[E=VAR]

vous pouvez d�finir la variable d'environnement nomm�e VAR avec une valeur vide.

La forme

[E=!VAR]

permet d'annuler la d�finition de la variable VAR.

Les variables d'environnement s'emploient dans diff�rents contextes, comme les programmes CGI, d'autres directives RewriteRule, ou des directives CustomLog.

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.

RewriteRule "\.(png|gif|jpg)" "-" [E=image:1]
CustomLog "logs/access_log" combined env=!image

Notez que le m�me effet peut �tre obtenu � l'aide de la directive SetEnvIf. Cette technique est pr�sent�e � titre d'exemple et non de recommandation.

top

END

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).

Ceci ne s'applique pas aux nouvelles requ�tes r�sultant d'une redirection externe.

top

F|forbidden

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 Deny, mais ce drapeau offre plus de souplesse dans l'attribution d'un statut Forbidden.

La r�gle suivante va interdire la t�l�chargement de fichiers .exe depuis votre serveur.

RewriteRule "\.exe" "-" [F]

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.

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.

top

G|gone

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.

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] :

RewriteRule "oldproduct" "-" [G,NC]

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.

top

H|handler

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 :

RewriteRule "!\." "-" [H=application/x-httpd-php]

L'expression rationnelle ci-dessus - !\. - correspond � toute requ�te qui ne contient pas le caract�re ..

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 .php soient affich�s par mod_php dans le cas o� ils font l'objet d'une requ�te avec l'extension .phps :

RewriteRule "^(/source/.+\.php)s$" "$1" [H=application/x-httpd-php-source]

L'expression rationnelle ci-dessus - ^(/source/.+\.php)s$ - va correspondre � toute requ�te qui d�butera par /source/, continuera par 1 ou n caract�res puis par .phps. La r�f�rence arri�re $1 fait r�f�rence � la correspondance captur�e entre parenth�ses de l'expression rationnelle.

top

L|last

Lorsque le drapeau [L] est pr�sent, mod_rewrite 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 last, ou � la commande break 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.

Si vous utilisez des r�gles RewriteRule dans des fichiers .htaccess ou des sections <Directory>, 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 .htaccess ou la section <Directory> 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.

Si vous utilisez des directives RewriteRule 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.

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.

Dans l'exemple donn� ici, toute requ�te est r��crite en index.php, la requ�te originale �tant ajout�e comme cha�ne de requ�te en argument � index.php ; cependant, la directive RewriteCond permet de s'assurer que si la requ�te concerne d�j� index.php, la directive RewriteRule sera saut�e.

RewriteBase "/"
RewriteCond "%{REQUEST_URI}" "!=/index.php"
RewriteRule "^(.*)" "/index.php?req=$1" [L,PT]
top

N|next

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.

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.

RewriteRule "(.*)A(.*)" "$1B$2" [N]

Vous pouvez vous repr�senter ce traitement comme une boucle while : tant que le mod�le de la r�gle correspond (c'est � dire, tant que l'URI contient un A), effectuer la substitution (c'est � dire, remplacer le A par un B).

A partir de la version 2.4.8, ce module renvoie une erreur apr�s 32000 it�rations afin d'�viter les boucles infinies. Ce nombre maximum d'it�ration peut �tre modifi� via le drapeau N.

# On veut remplacer 1 caract�re � chaque it�ration de la boucle
RewriteRule "(.+)[><;]$" "$1" [N=64000]
# ... ou s'arr�ter apr�s 10 it�rations
RewriteRule "(.+)[><;]$" "$1" [N=10]
top

NC|nocase

Avec le drapeau [NC], le mod�le de la r�gle RewriteRule 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�.

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, .jpg aussi bien que .JPG seront accept�s.

RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]
top

NE|noescape

Par d�faut, les caract�res sp�ciaux, comme & et ?, sont convertis en leur �quivalent hexad�cimal. Le drapeau [NE] permet d'�viter cette conversion.

RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]

Dans l'exemple ci-dessus, /anchor/xyz est r��crit en /bigpage.html#xyz. En l'absence du drapeau [NE], le # aurait �t� converti en son �quivalent hexad�cimal, %23, ce qui aurait provoqu� un code d'erreur "404 Not Found".

top

NS|nosubreq

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 mod_dir recherche des informations � propos des fichiers par d�faut du r�pertoire (comme les fichiers index.html), 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.

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.

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.

top

P|proxy

L'utilisation du drapeau [P] entra�ne le traitement de la requ�te par le module mod_proxy, 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 :

RewriteRule "/(.*)\.(jpg|gif|png)$" "http://images.example.com/$1.$2" [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.

Vous devez vous assurer que la cha�ne de substitution soit un URI valide (commen�ant typiquement par http://nom-serveur) qui puisse �tre trait�e par le module mod_proxy. 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 ProxyPass, pour faire correspondre le contenu distant � l'espace de nommage du serveur local.

Avertissement � propos de la s�curit�

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.

Avertissement au sujet des performances

Utiliser ce drapeau fait intervenir mod_proxy sans la gestion des connexions persistantes, ce qui signifie que vous obtiendrez des performances meilleurs si vous utilisez ProxyPass ou ProxyPassMatch.

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.

Partout o� cela est possible, pr�f�rez l'utilisation de ces directives.

Note: mod_proxy doit �tre activ� pour pouvoir utiliser ce drapeau.

top

PT|passthrough

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 RewriteRule 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 Alias, Redirect, ou ScriptAlias, par exemple, puissent avoir une chance d'accomplir leur t�che.

Si par exemple, vous avez un Alias pour /icons, et une r�gle RewriteRule qui renvoie vers /icons, vous devez utiliser le drapeau [PT] pour �tre s�r que l'Alias sera bien �valu�.

Alias "/icons" "/usr/local/apache/icons"
RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]

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'.

Avec le drapeau PT, le drapeau L est implicite : la r��criture s'arr�tera afin de transmettre la requ�te � la phase suivante du traitement.

Notez que le drapeau PT est implicite dans des contextes de r�pertoire comme les sections <Directory> ou les fichiers .htaccess. Le seul moyen de contourner ceci consiste � r��crire vers -.

top

QSA|qsappend

Quand l'URI de remplacement contient une cha�ne de requ�te, le comportement par d�faut de la r�gle RewriteRule est de supprimer la query string (il s'agit des param�tres �ventuellement pass�s dans l'URL apr�s le caract�re ?, usuellement pour les formulaires trait�s par la m�thode HTTP GET) existante, et de la remplacer par celle nouvellement cr��e. Avec le drapeau [QSA], les cha�nes de requ�te peuvent �tre combin�es.

Consid�rons la r�gle suivante :

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

Avec le drapeau [QSA], une requ�te pour /pages/123?one=two sera r��crite en /page.php?page=123&one=two. Sans le drapeau [QSA], la m�me requ�te sera r��crite en /page.php?page=123 - autrement dit, la cha�ne de requ�te (query string) existante sera supprim�e.

top

QSD|qsdiscard

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 RewriteRule 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.

Ce drapeau est disponible dans les versions 2.4.0 et sup�rieures.

Lorsque les drapeaux [QSD] et [QSA] sont utilis�s ensemble, c'est le drapeau [QSD] qui l'emporte.

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.

top

QSL|qslast

Par d�faut, le premier (le plus � gauche) point d'interrogation de la substitution s�pare le chemin de la requ�te de sa cha�ne de param�tres. Avec le drapeau [QSL] au contraire, les deux composants seront s�par�s en utilisant le dernier (le plus � droite) point d'interrogation.

Cela peut s'av�rer utile lorsqu'on recherche un fichier dont le nom contient des points d'interrogation. Si aucune cha�ne de param�tre n'est pr�sente dans la substitution, il est alors possible d'ajouter un point d'interrogation � la fin et d'utiliser ce drapeau.

Ce drapeau est disponible � partir de la version 2.4.19 du serveur HTTP Apache.

top

R|redirect

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 http://nom-du-serveur/), 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.

Tout 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 L �tait utilis�.

En plus des codes de statut de r�ponse, vous pouvez sp�cifier les codes de redirection en utilisant leurs noms symboliques : temp (d�faut), permanent, ou seeother.

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 http://cet-h�te[:ce-port], mais passe ensuite cette adresse � la r�gle suivante, ce qui provoquera le plus souvent des avertissements 'Invalid URI in request'.

top

S|skip

Le drapeau [S] sert � sauter des r�gles que vous ne voulez pas voir ex�cuter. La syntaxe du drapeau [S] est [S=N], o� N correspond au nombre de r�gles � sauter (sous r�serve que la r�gle RewriteRule corresponde). Ceci peut s'interpr�ter comme une instruction goto dans votre jeu de r�gles de r��criture. Dans l'exemple suivant, nous ne voulons ex�cuter la r�gle RewriteRule que si l'URI demand� ne correspond pas � un fichier existant.

# 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"

Cette technique trouve son utilit� dans le fait qu'une directive RewriteCond ne s'applique qu'� la r�gle qui la suit imm�diatement. Ainsi, si vous voulez qu'une directive RewriteCond s'applique � plusieurs r�gles RewriteRule, une technique possible consiste � inverser ces conditions et ajouter une RewriteRule avec le drapeau [Skip]. Cette technique permet d'�laborer des pseudo-constructions if-then-else : la derni�re r�gle du bloc then contiendra skip=N, o� N est le nombre de r�gles contenues dans le bloc else :

# 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

Il est probablement plus ais� de d�finir ce genre de configuration via les directives <If>, <ElseIf>, et <Else>.

top

T|type

D�finit le type MIME de la r�ponse r�sultante renvoy�e. L'effet est identique � celui de la directive AddType.

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 :

# Sert les fichier .pl en tant que plein texte
RewriteRule "\.pl$" "-" [T=text/plain]

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 :

# Les fichiers dont le nom contient 'IMG' sont des images jpg.
RewriteRule "IMG" "-" [T=image/jpg]

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 <FilesMatch>. 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.

Dans un contexte de niveau r�pertoire, n'utilisez que - (tiret) comme substitution, dans toute la s�quence de r��criture de mod_rewrite, 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 L pour terminer la s�quence courante de r��criture de mod_rewrite.

Langues Disponibles:  en  |  fr 

top

Commentaires

Notice:
This is not a Q&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 mailing lists.