From 666b769f05cf324625c405e37c6ad7d3d7e9176c Mon Sep 17 00:00:00 2001
From: Lucien Gentis Ce document est un complément à la documentation de référence du module
- Ce document est un complément à la documentation de référence du module
+ Le module Apache Ce document a pour ambition d'être suffisamment explicite pour
-permettre la compréhension, et non la copie en aveugle, de ce qui suit.
+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
- 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
+
Enfin, avant de procéder, assurez-vous d'avoir configuré le niveau de
-journalisation de
Enfin, avant de procéder, assurez-vous d'avoir configuré le niveau de
+journalisation de
mod_rewrite utilise le vocabulaire des
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
Vous trouverez dans ce qui suit le minimum à connaître pour être en
-mesure d'écrire des expressions rationnelles et des règles
Vous trouverez dans ce qui suit le minimum à connaître pour être en
+mesure d'écrire des expressions rationnelles et des règles
| 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. |
+
. |
+ 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. |
+
\ |
+ Echappe le caractère suivant | +\. correspondra à . (le point) et non Ã
+ tout caractère unique comme expliqué plus haut |
+
^ |
+ 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 |
^ | 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 ! 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 !.
Avec ! 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 !.
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
+ 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
- de la chaîne de substitution d'une directive
+ références sont disponibles lors de la
+ création de la chaîne de substitution d'une directive
Les captures dans les modèles de directives
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 +
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 + utiliser ces références arrières, donc ne vous affolez pas si elles vous paraissent un peu exotiques au premier abord.

- 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
+ 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.
Une règle de réécriture
Une règle de réécriture
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.
+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.
Figure 2 : Syntaxe de la directive RewriteRule.
La chaîne de Substitution peut, quant à elle, être de +
La chaîne de Substitution peut, quant à elle, être de trois types :
Ceci peut faire correspondre une requête à toute localisation voulue de
-votre système de fichiers, un peu comme la directive
Si la directive /usr/local/apache2/htdocs, cette règle va faire
-correspondre les requêtes pour http://example.com/foo au
+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.
/usr/local/apache2/htdocs/bar.
Ceci informe le client qu'il doit effectuer une nouvelle requête vers -l'URL spécifiée.
+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 :
+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 :
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
+
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 +
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...
Le comportement d'une règle Le comportement d'une règle Pour une liste des drapeaux disponibles, leurs significations, et des
exemples, voir le document Drapeaux de
-réécriture.[NC] :
+[NC] :
Il est possible d'utiliser une ou plusieurs directives
Par exemple, pour renvoyer toutes les requêtes en provenance d'une +
Par exemple, pour renvoyer toutes les requêtes en provenance d'une certaine tranche d'adresses IP vers un autre serveur, vous pouvez utiliser :
Si vous spécifiez plus d'une directive
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"
+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 %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 :
Si la requête concernait http://example.com/foo/bar,
+
Si la requête concernait http://example.com/foo/bar,
alors %1 contiendrait example.com et
$1 contiendrait foo/bar.
%1 contiendrait example.com et
La directive
La réécriture est en général définie au niveau de la configuration du +
La réécriture est en général définie au niveau de la configuration du
serveur principal (en dehors de toute section .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
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