<-
Apache > Serveur HTTP > Documentation > Version 2.2 > Modules

Module Apache mod_rewrite

Langues Disponibles:  en  |  fr 

Description:Ce module fournit un moteur de r��criture � base de r�gles permettant de r��crire les URLs des requ�tes � la vol�e
Statut:Extension
Identificateur�de�Module:rewrite_module
Fichier�Source:mod_rewrite.c
Compatibilit�:Disponible � partir de la version 1.3 d'Apache

Sommaire

Ce module utilise un moteur de r��criture � base de r�gles (bas� sur un interpr�teur d'expressions rationnelles) pour r��crire les URLs des requ�tes � la vol�e. Il accepte un nombre illimit� de r�gles, ainsi q'un nombre illimit� de conditions attach�es � chaque r�gle, fournissant ainsi un m�canisme de manipulation d'URL vraiment souple et puissant. Les manipulations d'URL peuvent d�pendre de nombreux tests, des variables du serveur, des variables d'environnement, des en-t�tes HTTP ou de l'horodatage. On peut m�me lancer des requ�tes vers une base de donn�es externe sous divers formats, afin d'obtenir une s�lection d'URL tr�s fine.

Ce module agit sur l'ensemble de l'URL (la partie concernant le chemin incluse) au niveau du serveur (httpd.conf) mais aussi au niveau du r�pertoire (.htaccess), et peut g�n�rer des parties de cha�ne de requ�te comme r�sultat. Le r�sultat de la r��criture peut renvoyer vers un sous-traitement interne, une redirection vers une requ�te externe, ou m�me vers le flux d'un proxy interne.

Vous trouverez d'avantage de d�tails, discussions et exemples dans la documentation d�taill�e sur mod_rewrite.

Directives

Sujets

Voir aussi

top

Marquage des caract�res sp�ciaux

Depuis Apache 1.3.20, les caract�res sp�ciaux dans les cha�nes de test et les cha�nes de Substitution peuvent �tre �chapp�s (c'est � dire trait�s comme des caract�res normaux sans tenir compte de leur signification en tant que caract�re sp�cial), en les faisant pr�c�der d'un caract�re anti-slash ('\'). En d'autres termes, vous pouvez inclure un v�ritable signe "dollar" dans une cha�ne de Substitution en utilisant '\$' ; ceci emp�che mod_rewrite de le traiter comme une r�f�rence arri�re.

top

Variables d'environnement

Ce module conserve le contenu de deux variables d'environnement CGI/SSI additionnelles (non standards) nomm�es SCRIPT_URL et SCRIPT_URI. Celles-ci contiennent l'adresse logique vue du Web de la ressource concern�e, tandis que les variables CGI/SSI standards SCRIPT_NAME et SCRIPT_FILENAME contiennent l'adresse physique de la ressource vue du syst�me.

Note : ces variables conservent l'URI/URL telle qu'elle �tait � l'arriv�e de la requ�te, c'est � dire avant tout processus de r��criture. Il est important de le savoir car le processus de r��criture est principalement utilis� pour r��crire des URLs logiques en chemins physiques.

Exemple

SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
SCRIPT_FILENAME=/u/rse/.www/index.html
SCRIPT_URL=/u/rse/
SCRIPT_URI=http://en1.engelschall.com/u/rse/
top

R��criture et h�tes virtuels

Par d�faut, les h�tes virtuels n'h�ritent pas de la configuration de mod_rewrite telle qu'elle est d�finie dans le contexte du serveur principal. Pour que la configuration du serveur principal s'applique aux h�tes virtuels, vous devez ins�rez les directives suivantes dans chaque section <VirtualHost> :

RewriteEngine On
RewriteOptions Inherit

top

Solutions pratiques

Vous trouverez de nombreux exemples d'utilisation courante (et moins courante) de mod_rewrite dans la documentation sp�cifique � la r��criture.

top

RewriteBase Directive

Description:D�finit l'URL de base pour les r��critures au niveau r�pertoire
Syntaxe:RewriteBase chemin URL
D�faut:None
Contexte:r�pertoire, .htaccess
AllowOverride:FileInfo
Statut:Extension
Module:mod_rewrite

La directive RewriteBase permet de sp�cifier le pr�fixe d'URL � utiliser dans un contexte de r�pertoire (htaccess) pour les directives RewriteRule qui r��crivent vers un chemin relatif.

Cette directive est obligatoire si vous utilisez un chemin relatif dans une substitution, et dans un contexte de r�pertoire (htaccess), sauf si au moins une de ces conditions est v�rifi�e :

Dans l'exemple ci-dessous, la directive RewriteBase est n�cessaire afin d'�viter une r��criture en http://example.com/opt/myapp-1.2.3/welcome.html car la ressource n'�tait pas relative � la racine des documents. Cette erreur de configuration aurait conduit le serveur � rechercher un r�pertoire "opt" � la racine des documents.

DocumentRoot /var/www/example.com
Alias /myapp /opt/myapp-1.2.3
<Directory /opt/myapp-1.2.3>
RewriteEngine On
RewriteBase /myapp/
RewriteRule ^index\.html$  welcome.html 
</Directory>
top

RewriteCond Directive

Description:D�finit une condition qui devra �tre satisfaite pour que la r��criture soit effectu�e
Syntaxe: RewriteCond cha�ne de test expression de comparaison
Contexte:configuration du serveur, serveur virtuel, r�pertoire, .htaccess
AllowOverride:FileInfo
Statut:Extension
Module:mod_rewrite

La directive RewriteCond d�finit une condition d'application d'une certaine r�gle. Une ou plusieurs directives RewriteCond peuvent pr�c�der une directive RewriteRule. La r�gle qui suit n'est appliqu�e que si l'�tat actuel de l'URI correspond � son mod�le, et si les conditions sont satisfaites.

cha�ne de test est une cha�ne de caract�res qui peut contenir, en plus du plein texte, les constructions �tendues suivantes :

Autres points � conna�tre :

  1. Les variables SCRIPT_FILENAME et REQUEST_FILENAME ont la m�me valeur - celle du champ filename de la structure interne du serveur Apache request_rec. Le premier nom est bien connu en tant que variable CGI, alors que le second est �quivalent � REQUEST_URI (qui contient la valeur du champ uri de la structure request_rec).

    Si une substitution survient, et si la r��criture se poursuit, la valeur des deux variables est mise � jour en cons�quence.

    Dans un contexte de serveur principal (c'est � dire avant que la requ�te n'ait �t� mise en relation avec le syst�me de fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas contenir le chemin local entier dans le syst�me de fichiers, car celui-ci n'a pas encore �t� d�termin� � ce stade du traitement. Les deux variables contiennent alors la valeur de REQUEST_URI. Pour obtenir le chemin local entier associ� � la requ�te dans le syst�me de fichiers dans un contexte de serveur principal, utilisez une recherche avant %{LA-U:REQUEST_FILENAME} pour d�terminer la valeur finale de REQUEST_FILENAME.

  2. On peut aussi utiliser %{ENV:variable}, o� variable peut �tre remplac� par toute variable d'environnement. Ces variables sont recherch�es dans les structures internes d'Apache, et (si elles n'y figurent pas) via getenv() depuis le processus du serveur Apache.
  3. Que mod_ssl soit charg� ou non, on peut utiliser %{SSL:variable}, o� variable peut �tre remplac� par le nom d'une variable d'environnement SSL, mais la valeur produite sera toujours une cha�ne de caract�res vide si mod_ssl n'est pas charg�. Exemple : %{SSL:SSL_CIPHER_USEKEYSIZE} peut correspondre � 128.
  4. Pour obtenir la valeur d'un en-t�te contenu dans une requ�te HTTP, on peut toujours utiliser %{HTTP:header}, o� header peut �tre remplac� par tout nom d'en-t�te MIME HTTP. Exemple : %{HTTP:Proxy-Connection} est la valeur de l'en-t�te HTTP ``Proxy-Connection:''.

    Si une condition contient un en-t�te HTTP, il est ajout� � l'en-t�te Vary de la r�ponse dans le cas o� la condition est �valu�e � true pour la requ�te. Dans le cas contraire, il n'est pas ajout�. L'ajout de l'en-t�te HTTP � l'en-t�te Vary de la r�ponse s'av�re n�cessaire pour une mise en cache correcte.

    Il faut garder � l'esprit que les conditions suivent une logique de court-circuit en cas de pr�sence du drapeau 'ornext|OR', si bien que certaines d'entre elles sont susceptibles de ne pas �tre �valu�es du tout.

  5. On peut utiliser %{LA-U:variable} pour les recherches en avant qui effectuent une sous-requ�te interne (bas�e sur l'URL), pour d�terminer la valeur finale de variable. Cela peut servir � acc�der � une variable (n�cessaire pour une r��criture) qui n'est pas disponible dans la situation pr�sente, mais le sera dans une phase ult�rieure.

    Par exemple, pour effectuer une r��criture qui tient compte de la variable REMOTE_USER dans un contexte niveau serveur (fichier httpd.conf), vous devez utiliser %{LA-U:REMOTE_USER} ; cette variable est d�finie au cours des phases d'autorisation, qui interviennent apr�s la phase de traduction de l'URL (pendant laquelle agit mod_rewrite).

    Par contre, comme mod_rewrite impl�mente son contexte niveau r�pertoire (fichier .htaccess) via la phase Fixup de l'API, et comme les phases d'autorisation interviennent avant cette phase, vous ne pouvez utiliser %{REMOTE_USER} que dans le contexte niveau serveur.

  6. On peut utiliser %{LA-F:variable} pour effectuer une sous-requ�te interne (bas�e sur un nom de fichier), pour d�terminer la valeur finale de variable. La plupart du temps, elle est identique � LA-U vue pr�c�demment.

expression de comparaison est une expression rationnelle qui est appliqu�e � l'instance actuelle de cha�ne de test. cha�ne de test est d'abord �valu�e, puis compar�e � l'expression de comparaison.

A savoir : expression de comparaison est une expression rationnelle compatible perl avec quelques extensions :

  1. Vous pouvez pr�fixer l'expression avec un caract�re '!' (point d'exclamation) pour indiquer une expression de non-correspondance.
  2. Il existe certaines variantes sp�ciales d'expressions de comparaison. A la place d'une expression rationnelle, vous pouvez utiliser :
    • '<expression' (inf�rieur au sens lexicographique)
      Traite l'expression comme une cha�ne de caract�res et la compare lexicographiquement � cha�ne de test. La condition est satisfaite si cha�ne de test est inf�rieure au sens lexicographique � l'expression.
    • '>expression' (sup�rieur au sens lexicographique)
      Traite l'expression comme une cha�ne de caract�res et la compare lexicographiquement � cha�ne de test. La condition est satisfaite si cha�ne de test est sup�rieure au sens lexicographique � l'expression.
    • '=expression' (�gal au sens lexicographique)
      Traite l'expression comme une cha�ne de caract�res et la compare lexicographiquement � cha�ne de test. La condition est satisfaite si cha�ne de test est �gale au sens lexicographique � l'expression (les deux cha�nes sont exactement identiques, caract�re pour caract�re). Si expression est "" (deux guillemets), cha�ne de test est compar�e � la cha�ne vide.
    • '-d' (est un r�pertoire)
      Traite cha�ne de test comme un chemin et v�rifie s'il existe ou pas, et s'il s'agit d'un r�pertoire.
    • '-f' (est un fichier r�gulier)
      Traite cha�ne de test comme un chemin et v�rifie s'il existe ou pas, et s'il s'agit d'un fichier r�gulier.
    • '-s' (est un fichier r�gulier d'une certaine taille)
      Traite cha�ne de test comme un chemin et v�rifie s'il existe ou pas, et s'il s'agit d'un fichier r�gulier dont la taille est sup�rieure � z�ro.
    • '-l' (est un lien symbolique)
      Traite cha�ne de test comme un chemin et v�rifie s'il existe ou pas, et s'il s'agit d'un lien symbolique.
    • '-x' (a le droit d'ex�cussion)
      Traite cha�ne de test comme un chemin et v�rifie s'il existe ou pas, et a le droit d'ex�cution. Ce droit est d�termin� en accord avec le syst�me d'exploitation sous-jacent.
    • '-F' (test de l'existence d'un fichier via une sous-requ�te)
      V�rifie si cha�ne de test 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 !
    • '-U' (test de l'existence d'une URL via une sous-requ�te)
      V�rifie si cha�ne de test 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 !

      Ce drapeau ne renvoie que des informations concernant le contr�le d'acc�s, l'authentification et l'autorisation. Il ne renvoie pas d'informations concernant le code d'�tat que le gestionnaire configur� (static file, CGI, proxy, etc...) aurait, quant � lui, retourn�.

    Note :

    Tous ces tests peuvent aussi �tre pr�fix�s par un point d'exclamation ('!') pour inverser leur signification.
  3. Vous pouvez aussi d�finir certains drapeaux pour l'expression de comparaison en ajoutant ces [drapeaux] comme troisi�me argument de la directive RewriteCond, o� drapeaux est un sous-ensemble s�par� par des virgules des drapeaux suivants :
    • 'nocase|NC' (no case)
      Rend le test insensible � la casse - il n'est pas fait de distinction entre majuscules et minuscules, � la fois dans le d�veloppement de cha�ne de test et dans expression de comparaison. Ce drapeau n'est pris en compte que lors d'une comparaison entre cha�ne de test et expression de comparaison. Il ne l'est pas pour les v�rification par sous-requ�tes ou sur le syst�me de fichiers.
    • 'ornext|OR' (ou condition suivante)
      Permet de cha�ner les conditions de r�gles avec un OU au lieu du AND implicite. Exemple typique :
      RewriteCond %{REMOTE_HOST}  ^hote1  [OR]
      RewriteCond %{REMOTE_HOST}  ^hote2  [OR]
      RewriteCond %{REMOTE_HOST}  ^hote3
      RewriteRule ...r�gles concernant tous ces h�tes...
      Sans ce drapeau, les paires condition/r�gle devraient �tre �crites trois fois.
    • 'novary|NV' (no vary)
      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.
      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.

Exemple :

Pour r��crire la page d'accueil d'un site en fonction de l'en-t�te ``User-Agent:'' de la requ�te, vous pouvez utiliser ce qui suit :

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]

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 bas� sur le 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).

top

RewriteEngine Directive

Description:Active ou d�sactive l'ex�cution du moteur de r��criture
Syntaxe:RewriteEngine on|off
D�faut:RewriteEngine off
Contexte:configuration du serveur, serveur virtuel, r�pertoire, .htaccess
AllowOverride:FileInfo
Statut:Extension
Module:mod_rewrite

La directive RewriteEngine active ou d�sactive l'ex�cution du moteur de r��criture. Si sa valeur est off, ce module n'ex�cutera aucun traitement et ne mettra pas � jour les variables d'environnement SCRIPT_URx.

Pour d�sactiver le module, il vaut mieux utiliser cette directive que commenter toutes les directives RewriteRule !

Notez que les h�tes virtuels n'h�ritent pas des configurations de r��criture. Ceci implique que vous devez ins�rer une directive RewriteEngine on dans chaque h�te virtuel pour lequel vous souhaitez utiliser des r�gles de r��criture.

Les directives RewriteMap du type prg 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 RewriteEngine n'a pas �t� d�finie � on.

top

RewriteLock Directive

Description:D�finit le nom du fichier verrou utilis� pour la synchronisation de RewriteMap
Syntaxe:RewriteLock chemin du fichier verrou
Contexte:configuration du serveur
Statut:Extension
Module:mod_rewrite

Cette directive d�finit le nom du fichier utilis� comme fichier verrou de synchronisation n�cessaire � mod_rewrite pour communiquer avec les programmes li�s � RewriteMap. D�finissez ce fichier verrou dans un chemin local (et non sur un montage NFS) si vous voulez utiliser un programme de comparaison pour la r��criture. Il n'est pas n�cessaire pour les autres types de comparaison pour la r��criture.

top

RewriteLog Directive

Description:D�finit le nom du fichier utilis� pour la journalisation des traitements du moteur de r��criture
Syntaxe:RewriteLog chemin du fichier journal|redirection vers un pipe
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_rewrite

La directive RewriteLog d�finit le nom du fichier dans lequel le serveur journalise tout processus de r��criture qu'il effectue. Si le nom ne commence pas par un slash ('/'), il est consid�r� comme relatif � la Racine du serveur. Cette directive ne doit appara�tre qu'une seule fois dans la configuration du serveur.

Il est d�conseill� de positionner chemin du fichier journal � /dev/null pour d�sactiver la journalisation des processus de r��criture, car m�me si le moteur de r��criture n'envoie plus sa sortie dans un fichier, il continue � cr�er un fichier journal en interne, ce qui va avoir pour effet de ralentir le serveur sans fournir aucun avantage � l'administrateur ! Pour d�sactiver la journalisation, vous pouvez soit supprimer ou commenter la directive RewriteLog, soit utiliser RewriteLogLevel 0 !

Le format de fichier journal RewriteLog se pr�sente comme suit :

Description Exemple
Adresse IP de l'h�te distant 192.168.200.166
Nom de login didtanten g�n�ral "-"
nom d'authentification de l'utilisateur HTTPnom d'utilisateur, ou "-" si non authentifi�
Date et heure de la requ�te[28/Aug/2009:13:09:09 --0400]
Serveur virtuel et son identifiant[www.example.com/sid#84a650]
Identifiant de la requ�te et indication �ventuelle qu'il s'agit d'une sous-requ�te[rid#9f0e58/subreq]
Niveau de s�v�rit� de l'entr�e du journal(2)
Message d'erreur au format texteforcing proxy-throughput with http://127.0.0.1:8080/index.html

S�curit�

Se r�f�rer au document Conseils � propos de la s�curit� dans Apache pour plus de d�tails sur la mani�re dont votre s�curit� pourrait �tre compromise si le r�pertoire o� se trouvent les fichiers journaux est inscriptible par quiconque autre que l'utilisateur qui d�marre le serveur.

Exemple

# Journalisation dans un fichier :
RewriteLog "/usr/local/var/apache/logs/rewrite.log"

# Journalisation redirig�e vers un pipe:
RewriteLog "|/path/to/parser.pl"

top

RewriteLogLevel Directive

Description:D�finit la verbosit� du fichier journal utilis� par le moteur de r��criture
Syntaxe:RewriteLogLevel niveau
D�faut:RewriteLogLevel 0
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_rewrite

La directive RewriteLogLevel d�finit le niveau de verbosit� du fichier journal de r��criture. Le niveau par d�faut 0 signifie aucune journalisation, tandis que 9 ou plus signifie que pratiquement toutes les actions sont journalis�es.

Pour d�sactiver la journalisation des actions de r��criture, positionnez simplement niveau � 0. Ceci d�sactive toute journalisation des actions de r��criture.

Utiliser une valeur �lev�e pour niveau va ralentir consid�rablement votre serveur Apache ! N'utilisez une journalisation de la r��criture � un niveau sup�rieur � 2 qu'� des fins de d�bogage !

Exemple

RewriteLogLevel 3

top

RewriteMap Directive

Description:D�finit une fonction de mise en correspondance pour la recherche de mots-cl�s
Syntaxe:RewriteMap nom de la correspondance type de correspondance:source de la correspondance
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_rewrite
Compatibilit�:Il est possible de choisir entre plusieurs types de bases de donn�es depuis la version 2.0.41 d'Apache

La directive RewriteMap d�finit une Table de correspondance pour la r��criture 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.

nom de la correspondance 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 :

${ nom de la correspondance : mot-cl� }
${ nom de la correspondance : mot-cl� | valeur par d�faut }

Lorsqu'une telle construction est rencontr�e, la table de correspondance Nom de la correspondance est consult�e et la cl� mot-cl� recherch�e. Si la cl� est trouv�e, la construction est remplac�e par la valeur de remplacement. Si la cl� n'est pas trouv�e, elle est remplac�e par la valeur par d�faut, ou par une cha�ne vide si aucune valeur par d�faut 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�.

Par exemple, vous pouvez d�finir une directive RewriteMap comme suit

RewriteMap map-exemple txt:/chemin/vers/fichier/map.txt

Vous pourrez ensuite utiliser cette table dans une directive RewriteRule comme suit :

RewriteRule ^/ex/(.*) ${map-exemple:$1}

Les combinaisons suivantes pour type de correspondance et source de la correspondance peuvent �tre utilis�es :

La directive RewriteMap peut appara�tre plusieurs fois. Utilisez une directive RewriteMap par fonction de correspondance pour d�clarer son fichier de correspondance pour la r��criture. Bien que vous ne puissiez pas d�clarer une table de correspondance dans un contexte de r�pertoire, vous pouvez bien entendu utiliser cette table dans un contexte de r�pertoire.

Note

En ce qui concerne les fichiers au format DBM et plein texte, les cl�s de recherches sont mises en cache en interne jusqu'� ce que le mtime (date de modification) du fichier soit modifi�, ou que le serveur soit red�marr�. Ainsi, certaines fonctions de correspondance dans les r�gles peuvent �tre utilis�es pour chaque requ�te. Cela ne pose pas probl�me, car la recherche externe n'intervient qu'une seule fois !
top

RewriteOptions Directive

Description:Configure certaines options sp�ciales pour le moteur de r��criture
Syntaxe:RewriteOptions Options
Contexte:configuration du serveur, serveur virtuel, r�pertoire, .htaccess
AllowOverride:FileInfo
Statut:Extension
Module:mod_rewrite
Compatibilit�:MaxRedirects n'est plus disponible depuis la version version 2.1

La directive RewriteOptions d�finit certaines options sp�ciales pour la configuration au niveau du serveur ou du r�pertoire. La cha�ne de caract�res Option ne peut actuellement prendre qu'une des valeurs suivantes :

inherit

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 .htaccess du r�pertoire parent sont h�rit�es.

Les r�gles h�rit�es du niveau parent sont appliqu�es after apr�s les r�gles sp�cifi�es dans le niveau enfant.
AllowAnyURI

A partir de la version 2.2.23 de httpd, lorsqu'une directive RewriteRule est utilis�e dans un contexte de serveur virtuel ou de serveur principal, mod_rewrite ne la traitera que si l'URI de la requ�te correspond � un chemin d'URL. Ceci permet d'�viter certains probl�mes de s�curit� o� certaines r�gles peuvent permettre l'expansion de mod�les inattendus (voir CVE-2011-3368 et CVE-2011-4317). Pour lever cette restriction, on peut activer l'option AllowAnyURI, et mod_rewrite va alors appliquer le jeu de r�gles � tout URI de requ�te, sans v�rifier si la cha�ne respecte la grammaire des chemins d'URL d�finie dans la sp�cification HTTP.

Avertissement en mati�re de s�curit�

L'activation de cette option expose le serveur � des probl�mes de s�curit� si les r�gles de r��criture n'ont pas �t� r�dig�es avec soin. Il est donc fortement recommand� de ne pas utiliser cette option. En particulier, prenez garde aux cha�nes d'entr�e contenant le caract�re '@' qui peut modifier l'interpr�tation de l'URI transform�, comme indiqu� dans les CVE ci-dessus.

MergeBase

Avec cette option, la valeur de RewriteBase est copi�e depuis une origine explicitement d�finie dans tout sous-r�pertoire qui ne d�finit pas sa propre RewriteBase. Par d�faut, jusqu'� la version 2.2.22, cette valeur n'�tait pas copi�e, alors qu'elle l'�tait avec la version 2.2.23 du serveur HTTP Apache. Le drapeau permettant de contr�ler explicitement ce comportement est disponible depuis la version 2.2.24.

top

RewriteRule Directive

Description:D�finit les r�gles pour le moteur de r��criture
Syntaxe:RewriteRule Mod�le Substitution [drapeaux]
Contexte:configuration du serveur, serveur virtuel, r�pertoire, .htaccess
AllowOverride:FileInfo
Statut:Extension
Module:mod_rewrite

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

Mod�le est une expression rationnelle compatible perl. Dans la premi�re r�gle de r��criture, l'expression est compar�e au chemin de l'URL de la requ�te (%-decoded) ; les expressions suivantes sont compar�es � la sortie de la derni�re r�gle de r��criture qui a �t� appliqu�e.

Qu'est-ce qui est compar� ?

Dans un contexte de serveur virtuel VirtualHost, le mod�le 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").

Dans les contextes de r�pertoire Directory et htaccess, le mod�le est tout d'abord compar� au chemin du syst�me de fichiers, apr�s suppression du pr�fixe ou chemin de base ayant conduit � la r�gle RewriteRule (par exemple "app1/index.html" ou "index.html" selon l'endroit o� les directives sont d�finies).

Si vous voulez effectuer une comparaison en tenant compte du nom d'h�te, du port ou de la cha�ne de param�tres, utilisez une directive RewriteCond comportant les variables %{HTTP_HOST}, %{SERVER_PORT}, ou %{QUERY_STRING}.

R��critures dans un contexte de r�pertoire

  • L'utilisation du moteur de r��criture dans les fichiers .htaccess et les sections <Directory> est un peu plus complexe.
  • Pour activer le moteur de r��criture dans ces contextes, vous devez d�finir "RewriteEngine On" et "Options FollowSymLinks". Si l'administrateur a d�sactiv� la possibilit� de modifier l'option FollowSymLinks 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�.
  • Lorsqu'on utilise le moteur de r��criture dans un fichier .htaccess, le chemin de base du r�pertoire courant (qui est toujours le m�me pour ce m�me r�pertoire) est automatiquement supprim� au cours de la comparaison avec le mod�le de la r�gle de r��criture, et automatiquement ajout� 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 RewriteBase pour plus de d�tails � propos de l'ajout du pr�fixe apr�s les substitutions relatives.
  • 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 %{REQUEST_URI} dans la directive RewriteCond.
  • Le prefixe supprim� se termine toujours par un slash, ce qui signifie que la comparaison s'effectue avec une cha�ne qui ne comporte jamais de slash de d�but. Ainsi, un mod�le contenant ^/ ne correspondra jamais dans un contexte de r�pertoire.
  • Bien que les r�gles de r��criture soient permises du point de vue de la syntaxe dans les sections <Location> et <Files>, elles n'y sont pas prises en compte, et n'y sont � priori d'aucune utilit�.

Pour quelques conseils � propos des expressions rationnelles, voir le document Introduction � mod_rewrite.

Dans mod_rewrite, on peut aussi utiliser le caract�re NON ('!') comme pr�fixe de mod�le. Ceci vous permet d'inverser la signification d'un mod�le, soit pour dire ``si l'URL consid�r�e ne correspond PAS � ce mod�le''. 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.

Note

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 $N dans la cha�ne de substitution !

Dans une r�gle de r��criture, Substitution est la cha�ne de caract�res qui remplace le chemin de l'URL original qui correspondait au Mod�le. Substitution peut �tre :

un chemin du syst�me de fichiers
Il indique alors la localisation dans le syst�me de fichiers de la ressource qui doit �tre envoy�e au client. Les substitutions ne sont trait�es en tant que chemin du syst�me de fichiers que si les r�gles sont d�finies dans un contexte de serveur (virtualhost), et si le premier �l�ment de ce chemin existe dans le syst�me de fichiers.
chemin d'URL
Un chemin relatif � la valeur de DocumentRoot vers la ressource qui doit �tre servie. Notez que mod_rewrite 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 Substitution /www/file.html, cette derni�re sera trait�e comme un chemin d'URL � moins qu'un r�pertoire nomm� www n'existe � la racine de votre syst�me de fichiers (ou dans le cas d'une r��criture au sein d'un fichier .htaccess, relativement � la racine des documents), 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 Alias) soient appliqu�es au chemin d'URL r�sultant, utilisez le drapeau [PT] comme d�crit ci-dessous.
URL absolue
Si une URL absolue est sp�cifi�e, mod_rewrite 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 [R] ci-dessous.
- (tiret)
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).

En plus du texte, la cha�ne Substition peut comporter :

  1. des r�f�rences arri�res ($N) vers le mod�le d'une directive RewriteRule
  2. des r�f�rences arri�res (%N) vers le dernier mod�le d'une directive RewriteCond qui correspondait
  3. des variables du serveur comme dans les cha�nes de test de condition d'une r�gle (%{VARNAME})
  4. des appels de fonctions de comparaison (${nom correspondance:cl�|d�faut})

Les r�f�rences arri�res sont des identificateurs de la forme $N (N=0..9), qui seront remplac�s par le contenu du N�me groupe du Mod�le qui correspondait. Les variables du serveur sont les m�mes que dans la Cha�ne de test d'une directive RewriteCond. Les fonctions de comparaison sont issues de la directive RewriteMap dans la section de laquelle elles sont d�crites. Ces trois types de variables sont �valu�es dans l'ordre ci-dessus.

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'URL est int�gralement remplac�e par la cha�ne de Substitution 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 L, ou par un autre drapeau qui implique un arr�t imm�diat, comme END ou F.

Modifier la cha�ne de requ�te

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 [QSA].

En outre, vous pouvez sp�cifier des actions sp�ciales � effectuer en ajoutant des [drapeaux] comme troisi�me argument de la directive RewriteRule. Flags est une liste de valeurs d�par�es par des virgules, d�limit�e par des crochets, choisies parmi les drapeaux de la table suivante. Vous trouverez plus de d�tails et d'exemples, pour chaque drapeau, dans la documentation sur les drapeaux de r��criture.

Drapeaux et syntaxe Fonction
B Echappe les caract�res non-alphanum�riques avant d'appliquer la transformation. d�tails ...
chain|C 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. d�tails ...
cookie|CO=NAME:VAL D�finit un cookie au niveau du navigateur client. La syntaxe compl�te est : CO=NAME:VAL:domain[:lifetime[:path[:secure[:httponly]]]] details ... d�tails ...
discardpath|DPI Supprime la partie PATH_INFO de l'URI r��crit. d�tails ...
env|E=[!]VAR[:VAL] D�finit la variable d'environnement VAR (� la valeur VAL si elle est fournie). La variante !VAR annule la d�finition de la variable VAR.d�tails ...
forbidden|F Renvoie une r�ponse 403 FORBIDDEN au navigateur client. d�tails ...
gone|G Renvoie un message d'erreur 410 GONE au navigateur client. d�tails ...
Handler|H=Gestionnaire de contenu L'URI r�sultant est envoy� au Gestionnaire de contenu pour traitement. d�tails ...
last|L 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). d�tails ...
next|N 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. d�tails ...
nocase|NC Rend la comparaison entre mod�les insensible � la casse. d�tails ...
noescape|NE Emp�che mod_rewrite d'effectuer un �chappement hexad�cimal des caract�res sp�ciaux dans le r�sultat de la r��criture. d�tails ...
nosubreq|NS La r�gle est saut�e si la requ�te courante est une sous-requ�te interne. d�tails ...
proxy|P Force l'envoi en interne de l'URL de substitution en tant que requ�te mandataire. d�tails ...
passthrough|PT 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 Alias ou Redirect. d�tails ...
qsappend|QSA Ajoute toute cha�ne de param�tres pr�sente dans l'URL de la requ�te originale � toute cha�ne de param�tres cr��e dans la cible de r��criture. d�tails ...
qsdiscard|QSD Supprime toute cha�ne de param�tres de l'URI entrant. d�tails ...
redirect|R[=code] Force une redirection externe, avec un code de statut HTTP optionnel. d�tails ...
END 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) d�tails ...
skip|S=nombre Si la r�gle courante s'applique, le moteur de r��criture doit sauter les nombre r�gles suivantes. d�tails ...
type|T=MIME-type Force l'attribution du Type-MIME sp�cifi� au fichier cible. d�tails ...

D�veloppement du r�pertoire home

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

Ce d�veloppement n'est pas effectu� si le drapeau PT est utilis� dans la directive RewriteRule

Voici toutes les combinaisons de substitution et leurs significations :

Dans la configuration au niveau du serveur principal (httpd.conf)
pour la requ�te ``GET /chemin/infochemin'':

R�gle                          R�sultat de la substitution
----------------------------------------------  ----------------------------------
^/chemin(.*) autre-chemin$1                      non valide, non support�

^/chemin(.*) autre-chemin$1  [R]                 non valide, non support�

^/chemin(.*) autre-chemin$1  [P]                 non valide, non support�
----------------------------------------------  ----------------------------------
^/chemin(.*) /autre-chemin$1                     /autre-chemin/infochemin

^/chemin(.*) /autre-chemin$1 [R]                 http://cet-h�te/autre-chemin/infochemin
                                                via redirection externe

^/chemin(.*) /autre-chemin$1 [P]                 n'a pas lieu d'�tre, non support�
----------------------------------------------  ----------------------------------
^/chemin(.*) http://cet-h�te/autre-chemin$1      /autre-chemin/infochemin

^/chemin(.*) http://cet-h�te/autre-chemin$1 [R]  http://cet-h�te/autre-chemin/infochemin
                                                via redirection externe

^/chemin(.*) http://cet-h�te/autre-chemin$1 [P]  n'a pas lieu d'�tre, non support�
----------------------------------------------  ----------------------------------
^/chemin(.*) http://autre h�te/autre-chemin$1     http://autre h�te/autre-chemin/infochemin
                                                via redirection externe

^/chemin(.*) http://autre h�te/autre-chemin$1 [R] http://autre h�te/autre-chemin/infochemin
                                                via redirection externe
                                                (le drapeau [R] est
						redondant)

^/chemin(.*) http://autre h�te/autre-chemin$1 [P] http://autre h�te/autre-chemin/infochemin
                                                via un mandataire interne

Dans une configuration de niveau r�pertoire pour /chemin
(/chemin/physique/vers/chemin/.htacccess, avec RewriteBase /chemin)
pour la requ�te ``GET /chemin/chemin-local/infochemin'':

R�gle                          R�sultat de la substitution
----------------------------------------------  ----------------------------------
^chemin-local(.*) autre-chemin$1                      /chemin/autre-chemin/infochemin

^chemin-local(.*) autre-chemin$1  [R]                 http://cet-h�te/chemin/autre-chemin/infochemin
                                                via redirection externe

^chemin-local(.*) autre-chemin$1  [P]                 n'a pas lieu d'�tre, non support�
----------------------------------------------  ----------------------------------
^chemin-local(.*) /autre-chemin$1                     /autre-chemin/infochemin

^chemin-local(.*) /autre-chemin$1 [R]                 http://cet-h�te/autre-chemin/infochemin
                                                via redirection externe

^chemin-local(.*) /autre-chemin$1 [P]                 n'a pas lieu d'�tre, non support�
----------------------------------------------  ----------------------------------
^chemin-local(.*) http://cet-h�te/autre-chemin$1      /autre-chemin/infochemin

^chemin-local(.*) http://cet-h�te/autre-chemin$1 [R]  http://cet-h�te/autre-chemin/infochemin
                                                via redirection externe

^chemin-local(.*) http://cet-h�te/autre-chemin$1 [P]  n'a pas lieu d'�tre, non support�
----------------------------------------------  ----------------------------------
^chemin-local(.*) http://autre h�te/autre-chemin$1     http://autre h�te/autre-chemin/infochemin
                                                via redirection externe

^chemin-local(.*) http://autre h�te/autre-chemin$1 [R] http://autre h�te/autre-chemin/infochemin
                                                via redirection externe
                                                (le drapeau [R] est
						redondant)

^chemin-local(.*) http://autre h�te/autre-chemin$1 [P] http://autre h�te/autre-chemin/infochemin
                                                via un mandataire interne

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.