Serveur Apache HTTP Version 2.4
Ce document est un compl�ment � la Documentation de r�f�rence de
mod_rewrite
. Il d�crit peut-�tre un des concepts les
plus importants � propos de mod_rewrite - � savoir, quand doit-on �viter
de l'utiliser.
mod_rewrite doit �tre consid�r� comme un dernier recours, lorsqu'aucune alternative n'est possible. Utiliser mod_rewrite lorsqu'il existe des alternatives plus simples conduit � des configurations confuses, fragiles, et difficiles � maintenir. La compr�hension des autres alternatives disponibles est une �tape tr�s importante sur le chemin de la ma�trise de mod_rewrite.
Vous devez vous attacher � comprendre le fonctionnement des exemples, car la plupart d'entre eux ne fonctionneront pas sur votre syst�me si vous vous contentez de les copier/coller dans vos fichiers de configuration.
Le cas le plus courant dans lequel mod_rewrite
est
l'outil appropri� est la situation o� la seule solution envisageable
n�cessite l'acc�s aux fichiers de configuration du serveur, alors que
cet acc�s ne vous est pas accord�. Certaines directives de configuration
ne sont disponibles que dans le fichier de configuration du serveur. Si
vous ne pouvez agir que sur les fichiers .htaccess, vous devrez donc
vous tourner vers mod_rewrite
.
mod_alias
fournit les directives Redirect
et RedirectMatch
qui permettent de
rediriger une URL vers une autre. Plut�t que d'utiliser la directive
RewriteRule
pour ce genre de
redirection simple d'une URL ou d'une classe d'URLs vers une autre, on
pr�f�rera l'utilisation de ces directives. En outre, avec
RedirectMatch
, vous pouvez inclure une expression
rationnelle dans votre crit�re de redirection, ce qui vous permet de
b�n�ficier de nombreux avantages de la directive
RewriteRule
.
Une utilisation courante de la directive RewriteRule
est
la redirection de toute une classe d'URLs. Par exemple, toutes les URLs
faisant r�f�rence au r�pertoire /un
doivent �tre
redirig�es vers http://un.example.com/
, ou toutes les
requ�tes http
doivent �tre redirig�es vers
https
.
Pour ce faire, il est pr�f�rable d'utiliser la directive
Redirect
. Souvenez-vous que la directive
Redirect
conserve les informations relatives au chemin. En
d'autres termes, la redirection d'une URL /un
va aussi
rediriger toutes les URLs de niveaux inf�rieurs comme
/un/deux.html
et /un/trois/quatre.html
.
Pour rediriger les URLs sous /un
vers
http://un.example.com/
, utilisez cette d�finition :
Redirect /one/ http://one.example.com/
Pour rediriger les URLs http
vers https
,
utilisez cette d�finition :
<VirtualHost *:80> ServerName www.example.com Redirect / https://www.example.com/ </VirtualHost > <VirtualHost *:443> ServerName www.example.com # ... ins�rer ici la configuration SSL </VirtualHost >
L'utilisation de la directive RewriteRule
pour accomplir
cette t�che peut se justifier s'il existe d'autres directives
RewriteRule
dans la m�me port�e. En effet, lorsque des
directives Redirect
et RewriteRule
se trouvent
dans la m�me port�e, les directives RewriteRule
sont
ex�cut�es en premier, sans tenir compte de leur ordre d'apparition dans
le fichier de configuration.
Dans le cas de la redirection http-vers-https, l'utilisation
de r�gles RewriteRule
se justifie si vous n'avez pas acc�s
au fichier de configuration principal, et devez donc accomplir cette
t�che au sein d'un fichier .htaccess
.
La directive Alias
permet
de mettre en correspondance un URI avec un r�pertoire, ce dernier �tant
en g�n�ral situ� en dehors de l'arborescence d�finie par la directive
DocumentRoot
. Bien qu'il soit
possible d'effectuer cette mise en correspondance avec
mod_rewrite
, il est pr�f�rable d'utiliser la directive
Alias
pour des raisons de simplicit� et de performances.
Alias /cats /var/www/virtualhosts/felines/htdocs
Pour effectuer cette mise en correspondance, mod_rewrite
s'impose si vous n'avez pas acc�s aux fichiers de configuration du
serveur. En effet, la directive Alias ne peut pas �tre utilis�e dans un
fichier .htaccess
, mais seulement dans un contexte de
serveur principal ou de serveur virtuel.
En outre, vous pouvez arriver au m�me r�sultat avec les liens
symboliques, pourvu que Options FollowSymLinks
soit activ�
sur votre serveur.
Bien qu'il soit possible de g�rer les serveurs
virtuels avec mod_rewrite, il s'agit rarement de la bonne m�thode.
Il est pratiquement toujours pr�f�rable de cr�er des blocs
<VirtualHost> individuels. Dans l'�ventualit� o� vous devez g�rer
un grand nombre de serveurs virtuels, vous devez vous tourner vers
mod_vhost_alias
pour cr�er ces serveurs
automatiquement.
Il est aussi possible d'utiliser des modules comme mod_macro
pour
cr�er un grand nombre de serveurs virtuels dynamiquement.
L'utilisation de mod_rewrite
pour la cr�ation de
serveurs virtuels peut se r�v�ler appropri�e si votre service
d'h�bergement ne vous permet pas d'acc�der aux fichiers de configuration
du serveur, et que vous soyez par cons�quent oblig� de passer par les
fichiers .htaccess
.
Voir le document cr�ation de serveurs virtuels avec mod_rewrite pour plus de d�tails sur la mani�re d'y parvenir si cela semble �tre tout de m�me la meilleure approche.
La directive RewriteRule
fournit le drapeau [P] qui permet de faire passer les URIs
r��crits par mod_proxy
.
RewriteRule ^/?images(.*) http://serveur-images.local/images$1 [P]
Cependant, dans les nombreux cas o� aucune correspondance au mod�le
n'est vraiment n�cessaire, comme dans l'exemple ci-dessus, il est
pr�f�rable d'utiliser la directive ProxyPass
. L'exemple pr�c�dent pourrait
�tre remplac� par :
ProxyPass /images/ http://serveur-images.local/images/
Que vous utilisiez RewriteRule
ou ProxyPass
, vous devrez dans tous les cas
utiliser aussi la directive ProxyPassReverse
pour intercepter les
redirections en provenance du serveur d'arri�re-plan :
ProxyPassReverse /images/ http://serveur-images.local/images/
Vous devrez cependant tout de m�me utiliser RewriteRule
lorsque d'autres RewriteRule
s se trouvent dans la m�me port�e,
car elles agissent en g�n�ral avant les directives
ProxyPass
, et peuvent ainsi les court-circuiter.
mod_rewrite
est souvent utilis� pour effectuer une
action en fonction de la pr�sence ou de l'absence d'une variable
d'environnement particuli�re ou d'un en-t�te de requ�te, ce qui peut
�tre accompli de mani�re plus efficace via la directive <If>
.
Consid�rons par exemple le sc�nario courant o� la directive
RewriteRule
est utilis�e pour forcer un nom
d'h�te canonique, tel que www.example.com
au lieu de
example.com
. Il est possible d'utiliser � la place la
directive <If>
comme
suit :
<If "req('Host') != 'www.example.com'"> Redirect / http://www.example.com </If>
On peut utiliser cette technique dans de nombreux sc�narios courant
pour remplacer mod_rewrite
pour effectuer des actions
en fonction d'en-t�tes de requ�tes ou de r�ponses, ou de variables
d'environnement.
Voir en particulier la documentation sur l'�valuation des expressions pour une vue d'ensemble des types d'expressions que vous pouvez utiliser dans les sections <If>, ainsi que dans certaines directives.