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

Quand ne pas utiliser mod_rewrite

Langues Disponibles:  en  |  fr 

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.

Voir aussi

top

Redirection simple

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.

top

Alias d'URL

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.

Utilisation de la directive Alias

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.

top

H�bergement virtuel

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.

top

Mandat simple

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

top

Test de variables d'environnement

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.

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.