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

Introduction au module Apache mod_rewrite

Langues Disponibles:  en  |  fr 

Ce document est un compl�ment � la documentation de r�f�rence du module mod_rewrite. Il d�crit les concepts de base dont la connaissance est n�cessaire pour l'utilisation de mod_rewrite. D'autres documents entrent d'avantage dans les d�tails, mais celui-ci devrait aider le d�butant � se mouiller les pieds.

Voir aussi

top

Introduction

Le module Apache mod_rewrite est un module puissant et sophistiqu� qui permet la r��criture des URLs. Gr�ce � lui, vous pouvez effectuer quasiment tous les types de r��criture d'URLs dont vous avez besoin. Il est cependant assez complexe, et peut para�tre intimidant au d�butant. Certains ont aussi tendance � traiter les r�gles de r��criture comme des incantations magiques, et � les utiliser sans vraiment comprendre leur mani�re d'agir.

Ce document a pour ambition d'�tre suffisamment explicite pour permettre la compr�hension, et non la copie en aveugle, de ce qui suit.

Gardez � l'esprit que de nombreuses t�ches de manipulation d'URLs courantes n'ont pas besoin de la puissance et de la complexit� de mod_rewrite. Pour les t�ches simples, voir mod_alias et la documentation sur la Mise en correspondance des URLs avec le syst�me de fichiers.

Enfin, avant de proc�der, assurez-vous d'avoir configur� le niveau de journalisation de mod_rewrite � un des niveaux de trace via la directive LogLevel. Bien que ceci risque de vous submerger sous une �norme quantit� d'informations, le d�bogage des probl�mes avec la configuration de mod_rewrite est � ce prix car vous verrez alors exactement comment chaque r�gle est trait�e.

top

Expressions rationnelles

mod_rewrite utilise le vocabulaire des Expressions rationnelles compatibles Perl. Ce document n'a pas pour pr�tention d'�tre une r�f�rence d�taill�e des expressions rationnelles. A cet effet, nous recommandons les pages de manuel de PCRE, la page de manuel des expressions rationnelles Perl, et l'ouvrage Mastering Regular Expressions, by Jeffrey Friedl.

Dans ce document, nous avons pour but de vous fournir suffisamment de vocabulaire des expressions rationnelles pour vous mettre le pied � l'�trier, sans �tre d�pass�, en esp�rant que les directives RewriteRule vous appara�tront comme des formules scientifiques, plut�t que comme des incantations magiques.

Vocabulaire des expressions rationnelles

Vous trouverez dans ce qui suit le minimum � conna�tre pour �tre en mesure d'�crire des expressions rationnelles et des r�gles RewriteRule. Ceci ne repr�sente certainement pas un vocabulaire des expressions rationnelles complet, mais constitue un bon point de d�part, et devrait vous aider � d�chiffrer les expressions rationnelles simples, et � �crire vos propres expressions.

Motif Signification Exemple
.Correspond � tout caract�re unique c.t correspondra � cat, cot, cut, etc.
+R�p�te le caract�re de correspondance pr�c�dent une ou plusieurs fois a+ correspond � a, aa, aaa, etc.
*R�p�te le caract�re de correspondance pr�c�dent z�ro ou plusieurs fois a* correspond � tout ce � quoi correspond a+, mais correspond aussi � la cha�ne vide.
?Rend la correspondance optionnelle. colou?r correspondra � color et colour.
^Appel� ancrage, correspond au d�but de la cha�ne ^a correspond � une cha�ne qui commence par a
$L'autre ancrage, correspond � la fin de la cha�ne. a$ correspond � une cha�ne qui se termine par a.
( )Regroupe plusieurs caract�res en une seule entit�, et conserve une correspondance � des fins d'utilisation dans une r�f�rence arri�re. (ab)+ correspond � ababab - � savoir, le + s'applique au groupe. Pour plus de d�tails sur les r�f�rences arri�res, voir ci-dessous.
[ ]Une classe de caract�res - correspond � un des caract�res de la classe c[uoa]t correspond � cut, cot ou cat.
[^ ]N�gation de la classe de caract�res - correspond � tout caract�re ne faisant pas partie de la classe c[^/]t correspond � cat ou c=t mais pas � c/t

Avec mod_rewrite, le caract�re ! peut pr�fixer une expression rationnelle afin d'en exprimer la n�gation. Autrement dit, une cha�ne ne correspondra que si elle ne correspond pas � l'expression situ�e apr�s le !.

Disponibilit� des r�f�rences arri�res dans les expressions rationnelles

Vous devez vous souvenir d'une chose importante : chaque fois que vous utilisez des parenth�ses dans un Mod�le ou dans un des mod�les de conditions, des r�f�rences arri�res sont cr��es en interne et peuvent �tre rappel�es via les cha�nes $N et %N (voir ci-dessous). Ces r�f�rences sont disponibles lors de la cr�ation des cha�nes de Substitution et des Cha�nes de test comme pr�cis� dans les chapitres suivants. La figure 1 montre � quels endroits les r�f�rences arri�res sont suceptibles d'�tre d�velopp�es, et illustre le flux des comparaisons effectu�es par les r�gles RewriteRule et RewriteCond. Dans les chapitres suivants, nous examinerons comment utiliser ces r�f�rences arri�res, donc ne vous affolez pas si elles vous paraissent un peu exotiques au premier abord.

Flux des comparaisons effectuées par les règles RewriteRule       et RewriteCond
Figure 1 : Le cheminement d'une r�f�rence arri�re � travers une r�gle.
Dans cet exemple, une requ�te pour /test/1234 serait transform�e en /admin.foo?page=test&id=1234&host=admin.example.com.

top

Les bases des r�gles de r��criture

Une r�gle de r��criture RewriteRule est constitu�e de trois arguments s�par�s par des espaces. Les arguments sont :

  1. Mod�le: le mod�le des URLs auxquelles la r�gle doit s'appliquer;
  2. Substitution: vers quoi la requ�te correspondante doit �tre transform�e;
  3. [drapeaux]: options affectant la requ�te r��crite.

Le Mod�le est une expression rationnelle. Au sein de la premi�re r�gle de r��criture, ou jusqu'� ce qu'une substitution survienne, elle est compar�e au chemin de l'URL de la requ�te entrante (la partie situ�e apr�s le nom d'h�te mais avant tout point d'interrogation qui indique le d�but d'une cha�ne de param�tres de requ�te) ou, dans un contexte de r�pertoire, au chemin de la requ�te relativement au r�pertoire pour lequel la r�gle est d�finie. Lorsqu'une substitution a eu lieu, les r�gles suivantes effectuent leurs comparaisons par rapport � la valeur substitu�e.

Syntaxe de la directive RewriteRule
Figure 2 : Syntaxe de la directive RewriteRule.

La cha�ne de Substitution peut, quant � elle, �tre de trois types :

Un chemin complet du syst�me de fichiers vers une ressource
RewriteRule ^/jeux /usr/local/jeux/web

Ceci peut faire correspondre une requ�te � toute localisation voulue de votre syst�me de fichiers, un peu comme la directive Alias.

Un chemin web vers une ressource
RewriteRule ^/foo$ /bar

Si la directive DocumentRoot a pour valeur /usr/local/apache2/htdocs, cette r�gle va faire correspondre les requ�tes pour http://example.com/foo au chemin /usr/local/apache2/htdocs/bar.

Une URL absolue
RewriteRule ^/produits/vues$ http://site2.example.com/voirproduits.html [R]

Ceci informe le client qu'il doit effectuer une nouvelle requ�te vers l'URL sp�cifi�e.

La cha�ne de Substitution peut aussi contenir des r�f�rences arri�res vers des parties du chemin d'URL entrant correspondant au Mod�le. Consid�rons ce qui suit :

RewriteRule ^/produits/(.*)/view$ /var/web/produitsdb/$1

La variable $1 sera remplac�e par tout texte correspondant � l'expression situ�e entre les parenth�ses dans le Mod�le. Par exemple, une requ�te pour http://example.com/produits/r14df/vue correspondra au chemin /var/web/produitsdb/r14df.

S'il y a plus d'une expression entre parenth�ses, elle seront accessibles selon leur ordre d'apparition via les variables $1, $2, $3, etc...

top

Drapeaux de r��criture

Le comportement d'une r�gle RewriteRule peut �tre modifi� par la pr�sence d'un ou plusieurs drapeaux en fin de r�gle. Par exemple, les conditions de correspondance d'une r�gle peuvent �tre rendues insensibles � la casse par la pr�sence du drapeau [NC] :

RewriteRule ^puppy.html petitchien.html [NC]

Pour une liste des drapeaux disponibles, leurs significations, et des exemples, voir le document Drapeaux de r��criture.

top

Conditions de r��criture

Il est possible d'utiliser une ou plusieurs directives RewriteCond pour restreindre les types de requ�tes auxquelles devra s'appliquer la r�gle RewriteRule suivante. Le premier argument est une variable d�crivant une caract�ristique de la requ�te, le second argument est une expression rationnelle qui doit correspondre � la variable, et un troisi�me argument optionnel est une liste de drapeaux qui modifient la mani�re dont la correspondance est �valu�e.

Syntaxe de la directive RewriteCond
Figure 3 : Syntaxe de la directive RewriteCond

Par exemple, pour renvoyer toutes les requ�tes en provenance d'une certaine tranche d'adresses IP vers un autre serveur, vous pouvez utiliser :

RewriteCond %{REMOTE_ADDR} ^10\.2\.
RewriteRule (.*) http://intranet.example.com$1

Si vous sp�cifiez plus d'une directive RewriteCond, ces directives doivent toutes �tre satisfaites pour que la r�gle RewriteRule suivante s'applique. Par exemple, pour interdire les requ�tes qui contiennent le mot "hack" dans la cha�ne de requ�te, sauf si elles contiennent aussi un cookie contenant le mot "go", vous pouvez utiliser :

RewriteCond %{QUERY_STRING} hack
RewriteCond %{HTTP_COOKIE} !go
RewriteRule . - [F]

Notez que le point d'exclamation indique une correspondance n�gative ; ainsi, la r�gle n'est appliqu�e que si le cookie ne contient pas "go"

Les correspondances dans les expressions rationnelles contenues dans les directives RewriteCond peuvent constituer des parties de la cha�ne de Substitution de la r�gle RewriteRule via les variables %1, %2, etc... Par exemple, ce qui suit va diriger la requ�te vers un r�pertoire diff�rent en fonction du nom d'h�te utilis� pour acc�der au site :

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/(.*) /sites/%1/$1

Si la requ�te concernait http://example.com/foo/bar, alors %1 contiendrait example.com et $1 contiendrait foo/bar.

top

Tables de r��criture

La directive RewriteMap permet en quelque sorte de faire appel � une fonction externe pour effectuer la r��criture � votre place. Tout ceci est d�crit plus en d�tails dans la Documentation suppl�mentaire sur RewriteMap.

top

Fichiers .htaccess

La r��criture est en g�n�ral d�finie au niveau de la configuration du serveur principal (en dehors de toute section <Directory>) ou dans une section <VirtualHost>. Il s'agit l� de la mani�re la plus simple de mettre en oeuvre la r��criture et nous la recommandons. Il est possible, cependant, de mettre en oeuvre la r��criture au sein d'une section <Directory> ou d'un fichier .htaccess ; ce type de configuration est cependant plus complexe. Cette technique est appel�e r��criture par r�pertoire.

La principale diff�rence avec les r��critures au niveau du serveur r�side dans le fait que le pr�fixe du chemin du r�pertoire contenant le fichier .htaccess est supprim� avant la mise en correspondance dans la r�gle RewriteRule. De plus, on doit utiliser la directive RewriteBase pour s'assurer que la requ�te est correctement mise en correspondance.

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.