From: Lucien Gentis
Lorsque ce module est construit en tant que module DSO, il peut être +chargé à lâaide de la commande :
+Le module Apache
+ 
+ Figure : Présentation simplifiée de la manière dont
+
mod_rewrite utilise le vocabulaire des Expressions rationnelles compatibles Perl. +
c=t mais pas à c/t
-
Avec ! peut
+
Le caractère ! (Not) 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 !.
Notez que lorsquâon utilise ! pour inverser un motif, les références arrières (par exemple $1,
+$2) ne sont pas disponibles, car le motif ne correspond plus.
La règle suivante, par exemple, redirige toute requête qui ne commence
+pas par /admin
Vous devez vous souvenir d'une chose importante : chaque fois
- que vous utilisez des parenthèses dans un Modèle ou dans
+ que vous utilisez des parenthèses dans un Motif 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
@@ -197,15 +222,23 @@ arrières dans les expressions rationnelles
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
+ Dans cet exemple, une requête pour /test/1234 vers lâhôte admin.example.com serait
transformée en
- /admin.foo?page=test&id=1234&host=admin.example.com.
+ /admin.foo?page=test&id=1234&host=admin.example.com,
+ sous réserve que %{DOCUMENT_ROOT}/test ne soit pas un fichier
+ existant.
Voir aussi Détails techniques + pour un diagramme montrant le cheminement des références arrières avec des + conditions multiples.
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 Motif est une expression
+rationnelle. Dans un contexte de serveur virtuel ou de serveur global, il
+est comparé au chemin dâURL %-décodé
+de la requête entrante — la partie après le nom dâhôte et le port, en
+excluant la chaîne de paramètres (par exemple /app/index.html).
+Dans un
Lorsquâune substitution a été effectuée, toute règle qui suit est comparée à +la valeur substituée.
+ +Le Motif nâest comparé quâau chemin dâURL — à lâexclusion
+des nom dâhôte, port ou chaîne de paramètres. Pour une comparaison incluant ces
+derniers, utilisez une condition %{HTTP_HOST}, %{SERVER_PORT} ou
+%{QUERY_STRING}, respectivement.

+ alt="Diagramme annoté pour la syntaxe de la directive RewriteRule montrant
+trois composants : le motif (une expression rationnelle mise en correspondance
+avec le chemin dâURL, la substitution (lâURL ou le chemin de remplacement) et
+des drapeaux facultatifs entourés de crochets" />
Figure 2 : Syntaxe de la directive RewriteRule.
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 :
+correspondant au Motif. 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
+Motif. Par exemple, une requête pour
http://example.com/produits/r14df/vue correspondra au
chemin /var/web/produitsdb/r14df.

+ alt="Diagramme annoté pour la syntaxe de la directive RewriteCond montrant
+deux composants : la chaîne à tester ou TestString (une variable ou du texte Ã
+tester) et le motif de condition ou CondPattern (expression rationnelle ou
+comparaison à évaluer) avec des drapeaux facultatifs entourés de crochets" />
Figure 3 : Syntaxe de la directive RewriteCond
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
Il est possible dâutiliser des règles de réécriture dans un .htaccess et sections
Si une règle
Par exemple, cette règle est dangereuse :
+ +Un attaquant pourrait en effet utiliser
+https://yoursite.com/redirect?https://evil.com pour rediriger les
+utilisateurs vers un site malveillant. Assurez vous de toujours valider ou
+contraindre les cibles de redirection. Si la destination doit être sur votre
+propre site, assurez vous que la substitution commence par / (un
+chemin relatif) plutôt que de permettre à lâutilisateur dâentrer un URL complet.
Lorsquâon utilise la drapeau [P] (proxy),
+
Par exemple :
+ +Un attaquant pourrait utiliser cette configuration pour tester des services +réseau internes qui autrement ne seraient pas accessibles depuis lâInternet. +Utilisez toujours un nom dâhôte fixe dans les cibles de mandataire et limitez +les références arrières à la partie chemin seulement.
+ +Des règles de réécriture qui associent directement des composants du chemin +fournis par lâutilisateur au système de fichier ouvrent la voie à des attaques +de traversée de chemin si lâentrée nâest pas correctement contrainte. Par +exemple :
+ +Une requête pour /files/../../etc/passwd pourrait accéder à des
+fichiers en dehors du répertoire souhaité. Utilisez des motifs restreints dans
+votre règle [a-zA-Z0-9_-]+ au lieu de .+), et utilisez les
+protections intégrées dâApache httpd (restrictions