Serveur Apache HTTP Version 2.4
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 |
Le module mod_rewrite
utilise un moteur de
r��criture � base de r�gles, bas� sur un interpr�teur
d'expressions rationnelles PCRE, pour r��crire les URLs � la vol�e. Par
d�faut, mod_rewrite
met en correspondance une URL
avec le syst�me de fichiers. Cependant, on peut aussi l'utiliser
pour rediriger une URL vers une autre URL, ou pour invoquer une
requ�te interne � destination du mandataire.
mod_rewrite
fournit une m�thode souple et
puissante pour manipuler les URLs en utilisant un nombre illimit�
de r�gles. Chaque r�gle peut �tre associ�e � un nombre illimit� de
conditions, afin de vous permettre de r��crire les URLs en
fonction de variables du serveur, de variables d'environnement,
d'en-t�tes HTTP, ou de rep�res temporels.
mod_rewrite
agit sur la totalit� de l'URL, y
compris la partie chemin. Une r�gle de r��criture peut �tre
invoqu�e dans apache2.conf
ou dans un fichier
.htaccess
. Le chemin g�n�r� par une r�gle de
r��criture peut inclure une cha�ne de param�tres, ou peut renvoyer
vers un traitement secondaire interne, une redirection vers une
requ�te externe ou vers le mandataire interne.
Vous trouverez d'avantage de d�tails, discussions et exemples dans la documentation d�taill�e sur mod_rewrite.
mod_rewrite
offre une journalisation d�taill�e
de ses actions aux niveaux de journalisation trace1
�
trace8
. Le niveau de journalisation peut �tre d�fini de
mani�re sp�cifique � mod_rewrite
via la directive
LogLevel
: jusqu'au niveau
debug
aucune action n'est journalis�e, alors qu'elles
le sont pratiquement toutes au niveau trace8
.
mod_rewrite
va ralentir votre serveur HTTP Apache
de mani�re dramatique ! N'utilisez un niveau de journalisation
sup�rieur � trace2
qu'� des fins de d�bogage !
LogLevel alert rewrite:trace3
Ceux qui sont familiers avec les versions pr�c�dentes de
mod_rewrite
vont probablement rechercher en vain les
directives RewriteLog
et
RewriteLogLevel
. Elles ont �t� en effet remplac�es
par une configuration de la journalisation par module, comme
mentionn� plus haut.
Pour extraire les traces sp�cifiques �
mod_rewrite
, affichez le fichier journal en
redirigeant la sortie vers grep :
tail -f error_log|fgrep '[rewrite:'
Description: | D�finit l'URL de base pour les r��critures au niveau r�pertoire |
---|---|
Syntaxe: | RewriteBase chemin URL |
D�faut: | Pas de valeur par d�faut |
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 :
DocumentRoot
(c'est �
dire que pour y acc�der, il n'est pas n�cessaire d'utiliser
une directive telle qu'Alias
).RewriteRule
, suffix� par
la substitution relative est aussi valide en tant qu'URL sur
le serveur (ce qui est rare).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>
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
permet de d�finir une
condition d'ex�cution d'une r�gle. Une ou plusieurs conditions
RewriteCond
peuvent pr�c�der une
directive RewriteRule
. La r�gle de r��criture correspondante n'est
ainsi ex�cut�e que si ces conditions sont satisfaites,
et si l'URI correspond au mod�le sp�cifi� dans la
r�gle.
TestString est une cha�ne qui peut contenir les extensions suivantes en plus du texte simple :
$N
(0 <= N <= 9). $1 � $9
permettent d'acc�der aux parties regroup�es (entre
parenth�ses) du mod�le, issues de la RewriteRule
concern�e par le jeu de conditions RewriteCond
courant. $0 donne acc�s � l'ensemble de la cha�ne
correspondant au mod�le.%N
(0 <= N <= 9). %1 � %9
permettent d'acc�der aux parties regroup�es (entre
parenth�ses) du mod�le, issues de la RewriteRule
concern�e par le jeu de conditions RewriteCond
courant. %0 donne acc�s � l'ensemble de la cha�ne
correspondant au mod�le.${nomTable:cl�|d�faut}
. Voir la href="#mapfunc">documentation sur RewriteMap
pour plus de d�tails.
%{
NAME_OF_VARIABLE }
,
o� NOM_DE_VARIABLE peut contenir une cha�ne issue
de la liste suivante :
En-t�tes HTTP : | connexion & requ�te: | |
---|---|---|
HTTP_USER_AGENT HTTP_REFERER HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_ACCEPT |
REMOTE_ADDR REMOTE_HOST REMOTE_PORT REMOTE_USER REMOTE_IDENT REQUEST_METHOD SCRIPT_FILENAME PATH_INFO QUERY_STRING AUTH_TYPE |
|
variables internes au serveur : | date et heure : | sp�ciaux : |
DOCUMENT_ROOT SERVER_ADMIN SERVER_NAME SERVER_ADDR SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE |
TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME |
API_VERSION THE_REQUEST REQUEST_URI REQUEST_FILENAME IS_SUBREQ HTTPS REQUEST_SCHEME |
Ces variables correspondent toutes aux en-t�tes MIME
HTTP de m�mes noms, au variables C du serveur HTTP Apache, ou
aux champs struct tm
du syst�me Unix. La
plupart d'entre elles sont document�es ailleurs dans le
manuel ou dans la sp�cification CGI.
SERVER_NAME et SERVER_PORT d�pendent respectivement
des valeurs des directives UseCanonicalName
et UseCanonicalPhysicalPort
.
Parmi les variables sp�cifiques � mod_rewrite, ou trouve les suivantes :
IS_SUBREQ
API_VERSION
THE_REQUEST
GET
/index.html HTTP/1.1
"), � l'exclusion de tout
en-t�te ajout� par le navigateur. Cette
valeur n'a pas �t� d�s�chapp�e (d�cod�e), � la
diff�rence de la plupart des variables suivantes.REQUEST_URI
QUERY_STRING
.REQUEST_FILENAME
REQUEST_FILENAME
contient la
valeur de REQUEST_URI
. En fonction de la
valeur de la directive AcceptPathInfo
, le serveur
peut n'utiliser que certains �l�ments de t�te du
REQUEST_URI
pour d�terminer � quel
fichier correspond la requ�te.HTTPS
mod_ssl
soit charg� ou non.REQUEST_SCHEME
ServerName
.Si la cha�ne de test contient la valeur sp�ciale
expr
, expression de comparaison sera trait�
en tant qu'expression rationnelle de type ap_expr. Si des en-t�tes HTTP sont
r�f�renc�s dans l'expression rationnelle, et si le drapeau
novary
n'est pas activ�, ils seront ajout�s �
l'en-t�te Vary.
Autres points � conna�tre ::
Les variables SCRIPT_FILENAME
et
REQUEST_FILENAME
contiennent toutes deux la valeur
du champ filename
de la
structure interne request_rec
du serveur HTTP Apache.
Le premier nom correspond au nom de variable bien connu CGI,
alors que le second est l'�quivalent de REQUEST_URI (qui
contient la valeur du champ uri
de
request_rec
).
Si une substitution intervient et si la r��criture se poursuit, la valeur des deux variables sera mise � jour en cons�quence.
Dans le contexte du serveur principal (c'est � dire avant que
la requ�te ne soit mise en correspondance avec le syst�me de
fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
contenir le chemin entier dans le syst�me de fichiers local car
ce chemin b'est pas connu � ce stade du traitement. Dans ce cas,
les deux variables contiendront la valeur de REQUEST_URI. Pour
obtenir le chemin complet de la requ�te dans le syst�me de
fichiers local dans le contexte du serveur principal, utilisez une
r�f�rence avant � base d'URL
%{LA-U:REQUEST_FILENAME}
pour d�terminer la valeur
finale de REQUEST_FILENAME.
%{ENV:variable}
, o� variable peut
correspondre � une variable d'environnement quelconque.%{ENV:variable}
est aussi disponible, o�
variable peut correspondre � toute variable
d'environnement. Peut �tre consult� via des structures internes
d'Apache httpd et (si on ne les trouve pas ici) via la fonction
getenv()
� partir du processus du serveur Apache
httpd.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 . Si mod_ssl
n'est pas
charg�, cette variable contiendra toujours une cha�ne vide.
Exemple : %{SSL:SSL_CIPHER_USEKEYSIZE}
pourra
contenir la valeur 128
.%{HTTP:en-t�te}
, o�
en-t�te peut correspondre � tout nom d'en-t�te MIME
HTTP, pour extraire la valeur d'un en-t�te envoy� dans la
requ�te HTTP. Par exemple, %{HTTP:Proxy-Connection}
contiendra la valeur de l'en-t�te HTTP
"Proxy-Connection:
".
Si on utilise un en-t�te HTTP
dans une condition, et si cette condition est �valu�e �
vrai
pour la requ�te, cet en-t�te sera ajout� � l'en-t�te Vary de
la r�ponse. Il ne le sera pas si la condition est �valu�e �
faux
. L'ajout de l'en-t�te HTTP � l'en-t�te Vary
est n�cessaire � une mise en cache appropri�e.
Il faut garder � l'esprit que les conditions suivent une
logique de cout-circuit si le drapeau
'ornext|OR
' est utilis�, et que de
ce fait, certaines d'entre elles ne seront pas �valu�es.
%{LA-U:variable}
, qui
permet d'effectuer une sous-requ�te interne � base d'URL, afin
de d�terminer la valeur finale de variable. Ceci permet
d'acc�der � la valeur d'une variable pour la r��criture inconnue
� ce stade du traitement, mais qui sera d�finie au
cours d'une phase ult�rieure.
Par exemple, pour effectuer une r��criture d�pendant de la
variable REMOTE_USER
dans le contexte du serveur
principal (fichier apache2.conf
), vous devez utiliser
%{LA-U:REMOTE_USER}
- cette variable est d�finie
par la phase d'autorisation qui intervient apr�s la
phase de traduction d'URL (pendant laquelle mod_rewrite op�re).
Par contre, comme mod_rewrite impl�mente son contexte de
r�pertoire (fichier .htaccess
) via la phase Fixup
de l'API, et comme la phase d'autorisation intervient
avant cette derni�re, vous pouvez vous contenter
d'utiliser %{REMOTE_USER}
dans ce contexte.
%{LA-F:variable}
peut �tre utilis�e pour effectuer
une sous-requ�te interne (bas�e sur le nom de fichier), afin de
d�terminer la valeur finale de variable. La plupart du
temps, elle est identique � LA-U (voir ci-dessus).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.
expression de comparaison est en g�n�ral une expression rationnelle compatible perl, mais vous disposez des syntaxes suppl�mentaires suivantes pour effectuer d'autres tests utiles sur cha�ne de test :
!
' (point d'exclamation) pour indiquer une
expression de non-correspondance.""
(deux guillemets),
cha�ne de test est compar�e � la cha�ne vide.Si la cha�ne de test contient la valeur sp�ciale
expr
, la cha�ne de comparaison sera
trait�e en tant qu'expression rationnelle de type ap_expr.
Dans l'exemple ci-dessous, on utilise -strmatch
pour comparer le REFERER
avec le nom d'h�te du
site afin de bloquer le hotlinking (r�f�rencement direct)
non d�sir�.
RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
RewriteRule ^/images - [F]
[
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)ornext|OR
'
(ou condition suivante)RewriteCond %{REMOTE_HOST} ^host1 [OR] RewriteCond %{REMOTE_HOST} ^host2 [OR] RewriteCond %{REMOTE_HOST} ^host3 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)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 en mode texte), vous acc�derez � une page d'accueil min (qui peut �tre une version con�ue pour une navigation simple bas�e sur le texte). Si aucune de ces conditions n'est satisfaite (vous utilisez tout autre navigateur, ou votre navigateur s'identifie de mani�re non standard), vous acc�derez � la page d'accueil std (standard).
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
.
Plut�t que de commenter toutes les directives RewriteRule
, il est pr�f�rable
d'utiliser cette directive si l'on souhaite d�sactiver les
r�gles de r��criture dans un contexte particulier.
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
.
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 |
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 :
httxt2dbm
(D�tails ...).RewriteMap
: toupper, tolower, escape ou unescape
(D�tails ...).Vous trouverez plus de d�tails et de nombreux exemples dans le RewriteMap HowTo.
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
ou les sections <Directory>
du r�pertoire
parent sont h�rit�es. Les r�gles h�rit�es sont virtuellement
copi�es dans la section o� cette directive est utilis�e. Si elles
sont utilis�es avec des r�gles locales, les r�gles h�rit�es sont
plac�es apr�s ces derni�res. La place de cette directive - avant
ou apr�s les r�gles locales - n'a aucune influence sur ce
comportement. Si des r�gles locales ont forc� l'arr�t de la
r��criture, les r�gles h�rit�es ne seront pas trait�es.
InheritBefore
M�me effet que l'option Inherit
ci-dessus, mais
les r�gles sp�cifi�es dans le niveau parent s'appliquent
avant les r�gles sp�cifi�es dans le niveau
enfant. Disponible depuis la version 2.3.10 du serveur HTTP
Apache.
AllowNoSlash
Par d�faut, mod_rewrite
ignore les URLs qui
correspondent � un r�pertoire sur disque, mais ne comportent pas
de slash final, afin que le module mod_dir
redirige le client vers l'URL canonique avec un slash final.
Lorsque la directive DirectorySlash
est d�finie � off, il
est possible de sp�cifier l'option AllowNoSlash
pour
s'assurer que les r�gles de r��criture ne soient plus ignor�es.
Si on le souhaite, cette option permet de faire s'appliquer des
r�gles de r��criture qui correspondent � un r�pertoire sans slash
final au sein de fichiers .htaccess. Elle est disponible �
partir de la version 2.4.0 du serveur HTTP Apache.
AllowAnyURI
A partir de la version 2.2.22 de httpd, lorsqu'une directive RewriteRule
se situe dans un
contexte de serveur virtuel
ou de serveur principal,
mod_rewrite
ne traitera les r�gles de r��criture
que si l'URI de la requ�te respecte la syntaxe d'un chemin URL. Ceci permet
d'�viter certains probl�mes de s�curit� o� des r�gles
particuli�res pourraient permettre des d�veloppements de mod�les
inattendus (voir CVE-2011-3368
et CVE-2011-4317).
Pour s'affranchir de la restriction relative � la syntaxe des chemins URL, on peut
utiliser l'option AllowAnyURI
, afin de permettre �
mod_rewrite
d'appliquer le jeu de r�gles � toute
cha�ne de requ�te URI, sans v�rifier si cette derni�re respecte la
grammaire des chemins URL d�finie dans la sp�cification HTTP.
L'utilisation de cette option rendra le serveur vuln�rable �
certains probl�mes de s�curit� si les r�gles de r��critures
concern�es n'ont pas �t� r�dig�es avec soin. Il est par cons�quent
fortement recommand� de ne pas utiliser cette
option. En particulier, pr�tez attention aux cha�nes en entr�e contenant le
caract�re '@
', qui peuvent modifier l'interpr�tation
de l'URI r��crite, comme indiqu� dans les liens ci-dessus.
MergeBase
Avec cette option, la valeur de la directive RewriteBase
est copi�e depuis le
r�pertoire o� elle est explicitement d�finie dans tout
sous-r�pertoire qui ne d�finit pas sa propre directive RewriteBase
. C'�tait le
comportement par d�faut de la version 2.4.0 � la version 2.4.3, et
cette option permet de le r�tablir � partir de la version 2.4.4 du
serveur HTTP Apache.
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 (%-decoded) chemin de l'URL (ou au chemin fichier, en fonction du contexte) de la requ�te. Les expressions suivantes sont compar�es � la sortie de la derni�re r�gle de r��criture qui correspondait.
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 le serveur vers la r�gle RewriteRule
(par
exemple "app1/index.html" ou
"index.html" selon l'endroit o� les directives sont d�finies).
Si vous souhaitez faire une comparaison sur le nom
d'h�te, le port, ou la cha�ne de requ�te, utilisez une
directive RewriteCond
comportant respectivement les variables
%{HTTP_HOST}
, %{SERVER_PORT}
, ou
%{QUERY_STRING}
.
<Directory>
est un peu plus
complexe.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�..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.%{REQUEST_URI}
dans la directive
RewriteCond
.^/
ne correspondra jamais dans un contexte de r�pertoire.<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.
$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 :
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.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)En plus du texte, la cha�ne Substition peut comporter :
$N
) vers le mod�le
d'une directive RewriteRule%N
) vers le dernier
mod�le d'une directive RewriteCond qui correspondait%{VARNAME}
)${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. Le chemin de l'URL ou du syst�me de fichier (voir
ci-dessus Qu'est-ce qui est
compar� ?) 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
.
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
. S�par�s par des virgules au sein d'une
liste encadr�e par des crochets, les drapeaux peuvent
�tre choisis dans la table suivante. Vous trouverez plus de
d�tails, et des exemples pour chaque drapeau dans le document � propos des 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 ... |
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
(apache2.conf
)
pour la requ�te ``GET
/chemin/infochemin
'':
R�gle | R�sultat de la substitution |
---|---|
^/un_chemin(.*) autre_chemin$1 | invalide, non support� |
^/un_chemin(.*) autre_chemin$1 [R] | invalide, non support� |
^/un_chemin(.*) autre_chemin$1 [P] | invalide, non support� |
^/un_chemin(.*) /autre_chemin$1 | /autre_chemin/info_chemin |
^/un_chemin(.*) /autre_chemin$1 [R] | http://cet_hote/autre_chemin/info_chemin via une redirection externe |
^/un_chemin(.*) /autre_chemin$1 [P] | sans objet, non support� |
^/un_chemin(.*) http://cet_hote/autre_chemin$1 | /autre_chemin/info_chemin |
^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R] | http://cet_hote/autre_chemin/info_chemin via une redirection externe |
^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P] | sans objet, non support� |
^/un_chemin(.*) http://autre_hote/autre_chemin$1 | http://autre_hote/autre_chemin/info_chemin via une redirection externe |
^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R] | http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est redondant) |
^/somepath(.*) http://otherhost/otherpath$1 [P] | http://otherhost/otherpath/pathinfo via internal proxy |
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 |