From: Rich Bowen
-RewriteCond %{REMOTE_HOST} ^host1.* [OR]
-RewriteCond %{REMOTE_HOST} ^host2.* [OR]
-RewriteCond %{REMOTE_HOST} ^host3.*
+RewriteCond %{REMOTE_HOST} =host1 [OR]
+RewriteCond %{REMOTE_HOST} =host2 [OR]
+RewriteCond %{REMOTE_HOST} =host3
RewriteRule ...some special stuff for any of these hosts...
-RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
+RewriteCond %{HTTP_USER_AGENT} Mozilla
RewriteRule ^/$ /homepage.max.html [L]
-RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
+RewriteCond %{HTTP_USER_AGENT} Lynx
RewriteRule ^/$ /homepage.min.html [L]
RewriteRule ^/$ /homepage.std.html [L]
diff --git a/docs/manual/mod/mod_rewrite.html.fr b/docs/manual/mod/mod_rewrite.html.fr
index 71e325d1160..4d78f234163 100644
--- a/docs/manual/mod/mod_rewrite.html.fr
+++ b/docs/manual/mod/mod_rewrite.html.fr
@@ -140,10 +140,7 @@ SCRIPT_URI=http://en1.engelschall.com/u/rse/
Solutions pratiques
Vous trouverez de nombreux exemples d'utilisation courante (et
- moins courante) de mod_rewrite dans le
- Guide de réécriture,
- et dans le
- Guide de réécriture avancée.
+ moins courante) de mod_rewrite dans la documentation spécifique à la réécriture.
[QSA].
-
En outre, vous pouvez spécifier des actions spéciales à effectuer en ajoutant
des
[drapeaux]
comme troisième argument de la directive
- RewriteRule. Séparés par des virgules au sein d'une
- liste encadrée par des crochets, les drapeaux peuvent
- être choisis parmi les suivants :
B' (références arrière échappées)Les URLs doivent être non échappées pour pouvoir être - comparées par Apache, si bien que les références arrières - renverront une valeur non échappée au moment où elles seront - appliquées. En utilisant le drapeau B, les caractères non - alphanumériques des références arrières seront echappés. Par - exemple, considérons la règle :
- RewriteRule ^(.*)$ index.php?show=$1
- Elle va faire correspondre /C++ à
- index.php?show=/C++. Mais elle va aussi faire
- correspondre /C%2b%2b à
- index.php?show=/C++, car le caractère
- %2b n'a pas été échappé. Par contre, avec le
- drapeau B, la substitution s'effectuera vers
- index.php?show=/C%2b%2b.
Ce processus d'échappement est particulièrement nécessaire - dans le contexte du mandataire, où l'adresse d'arrière-plan ne - fonctionnera pas si elle se présente sous une forme - non échappée.
-chain|C'
- (chaînage avec la règle suivante).www'', dans un jeu de règles au niveau
- du répertoire, lorsque vous faites intervenir une redirection
- externe (où la partie ``.www'' ne doit pas
- figurer !).cookie|CO=NAME:VAL:domain[:lifetime[:path[:secure[:httponly]]]]'
- (définit un cookie)HttpOnly sera utilisé, rendant le cookie
- inaccessible au code javascript pour les navigateurs qui
- supportent cette fonctionnalité.discardpathinfo|DPI'
- (ignore PATH_INFO)Dans un contexte de répertoire, l'URI avec lequel chaque
- règle RewriteRule effectue sa comparaison
- est la concaténation des valeurs courantes de l'URI et de
- PATH_INFO.
L'URI courant peut être l'URI initial tel qu'il a été envoyé - par le client, le résultat d'un traitement précédent de - l'ensemble de règles de mod_rewrite, ou le résultat de la règle - précédente du traitement courant de mod_rewrite.
- -Paradoxalement, les information PATH_INFO ajoutées à l'URI
- avant chaque règle ne représentent que la valeur qu'avait
- PATH_INFO avant ce cycle de traitement des règles de
- mod_rewrite. En conséquence, si de grandes parties de l'URI ont
- été concernées par les règles et ont été copiées vers des
- chaînes de substitution au cours du traitement de plusieurs
- règles RewriteRule, sans considérer
- quelles parties de l'URI provenaient des informations de
- PATH_INFO courantes, l'URI final pourra se voir ajouter
- plusieurs copies de PATH_INFO.
Utilisez ce drapeau avec toute substitution où les - informations de PATH_INFO résultant de la mise en correspondance - précédente de cette requête avec le système de fichiers ne - présente pas d'intérêt. Ce drapeau permet d'ignorer les - informations de PATH_INFO élaborées avant le cycle de traitement - courant de mod_rewrite. PATH_INFO ne sera pas recalculé avant - que le cycle de traitement courant de mod_rewrite ne se termine. - Les règles suivantes de ce cycle de traitement ne verront que le - résultat direct des substitutions, sans aucune information - PATH_INFO ajoutée..
env|E=!VAR[:VAL]'
- (définit une variable d'environnement)$N et %N)
- qui seront évaluées. La forme !VAR annule
- la définition de la variable d'environnement VAR qui, de
- ce fait, peut plus recevoir aucune valeur VAL.
- Vous pouvez utiliser ce drapeau plusieurs
- fois pour définir plusieurs variables. Les variables peuvent
- ensuite être déréférencées dans de nombreux cas, et le plus
- souvent depuis XSSI (via <!--#echo
- var="VAR"-->) ou CGI ($ENV{'VAR'}).
- Vous pouvez déréférencer la variable dans un modèle de
- directive RewriteCond ultérieure, en utilisant
- %{ENV:VAR}. Ce drapeau permet de supprimer
- des informations d'une URL, tout en conservant la trace de
- ces informations.forbidden|F' (force l'interdiction d'une
- URL)gone|G' (signale la non-existence d'une
- URL)handler|H=Gestionnaire de contenu'
- (impose un gestionnaire de contenu)ScriptAlias du
- module mod_alias, qui impose en interne le
- gestionnaire ``cgi-script'' à tous les fichiers
- du répertoire correspondant.last|L'
- (dernière règle)last ou la commande C
- break. Il permet d'éviter la réécriture par les
- règles suivantes d'une URL déjà réécrite. Rappelez-vous
- cependant que si une directive
- RewriteRule génère une redirection
- interne (ce qui arrive fréquemment lors d'une réécriture dans
- un contexte de répertoire), la requête sera réinjectée et le
- processus de réécriture sera réitéré à partir de la
- première directive RewriteRule.next|N'
- (prochain round)next ou la commande C continue. Il
- permet de redémarrer le processus de réécriture - en se
- positionnant immédiatement au niveau de la première règle.
- Prenez garde à ne pas créer de bouclage
- infini !nocase|NC'
- (insensible à la casse)noescape|NE'
- (pas d'échappement de l'URI en sortie)
- RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
-
/foo/zed' par la requête plus
- sure '/bar?arg=P1=zed'.
- nosubreq|NS'
- (sous-requêtes non concernées)Si ce drapeau est présent, le moteur de réécriture
- n'applique pas la règle si la requête courante est une
- sous-requête interne. Par exemples, des sous-requêtes sont
- générées en interne par Apache lorsque
- mod_include essaie de trouver des
- informations à propos d'éventuels fichiers de répertoire par
- défaut (fichiers index.xxx). Dans le cas d'une
- sous-requête, ce n'est pas toujours utile, et peut même
- provoquer des erreurs si l'ensemble du jeu de règles est
- appliqué. Ce drapeau permet d'exclure certaines règles.
Pour déterminer si l'on doit appliquer une règle ou pas, - si une URL est préfixée par un script CGI, pour forcer son - traitement par le script CGI, vous allez probablement - rencontrer des problèmes (ou tout du moins une surcharge - significative) avec les sous-requêtes. Dans ce cas, - utilisez ce drapeau
-proxy|P' (impose le mandataire)http://nom d'hôte) pouvant être traitée
- par le module proxy d'Apache. Si ce n'est pas le cas, le
- module proxy vous renverra une erreur. Utilisez ce drapeau
- pour implémenter de manière plus puissante la directive ProxyPass, pour mettre
- en correspondance un contenu distant dans l'espace de
- nommage du serveur local.
-
- Note: mod_proxy doit être activé pour
- pouvoir utiliser ce drapeau..
passthrough|PT'
- (passage au gestionnaire suivant)filename au
- champ uri de la structure interne
- request_rec. Ce drapeau n'est qu'une astuce
- permettant un traitement supplémentaire de la sortie des
- directives RewriteRule, en utilisant
- Alias, ScriptAlias,
- Redirect, ou d'autres directives en provenance
- de divers traducteurs URI/nom de fichier. Par exemple, pour
- réécrire /abc vers /def avec
- mod_rewrite, puis /def vers
- /ghi avec mod_alias :
-
- RewriteRule ^/abc(.*) /def$1 [PT]
- Alias /def /ghi
-
PT est omis,
- mod_rewrite va réécrire
- uri=/abc/... vers filename=/def/...
- comme tout traducteur URI/nom de fichier compatible avec
- l'API doit le faire. Puis, mod_alias va tenter
- une transition URI vers nom de fichier, et va échouer.
-
- Note: Vous devez utiliser ce drapeau si vous
- voulez mélanger des directives en provenance de différents
- modules qui effectuent une traduction
- URL/nom de fichier. Un exemple typique est
- l'utilisation conjointe de mod_alias et de
- mod_rewrite.
Le drapeau PT rend implicite la présence du
- drapeau L flag : la réécriture sera stoppée afin
- de transmettre la requête à la phase suivante du
- traitement.
qsappend|QSA'
- (ajout d'une chaîne de requête)redirect|R
- [=code]' (force une redirection)Préfixe la chaîne de substitution par
- http://hôte[:port]/ (ce qui fait de la nouvelle
- URL un URI) pour forcer une redirection externe. Si aucun
- code n'est défini, une réponse HTTP 302 (MOVED
- TEMPORARILY) sera renvoyée. Si vous voulez renvoyer un autre
- code de réponse, spécifiez simplement le nombre approprié ou
- utilisez un des noms symboliques suivants : temp
- (défaut), permanent ou seeother.
- Vous pouvez utiliser ce drapeau pour que les règles mettent
- l'URL sous forme canonique et la renvoient au client, pour
- traduire ``/~'' en ``/u/'', ou pour
- ajouter systématiquement un slash à
- /u/utilisateur, etc...
- Note: Si vous utilisez ce drapeau,
- assurez-vous que le champ de substitution est une URL
- valide ! Si ce n'est pas le cas, vous serez redirigé vers
- une URL invalide. Souvenez-vous que, s'il est seul, ce
- drapeau va seulement préfixer l'URL par
- http://hôte[:port]/, et que le processus de
- réécriture va se poursuivre. En général, vous voudrez plutôt
- stopper la réécriture à ce point, et rediriger immédiatement.
- Pour stopper la réécriture, vous pouvez ajouter le drapeau
- 'L'.
Bien qu'on utilise en général ce drapeau pour les
- redirections, on peut spécifier tout code de statut valide.
- Si le code de statut est en dehors de la gamme des codes de
- redirection (300-399), la chaîne de Substitution est
- supprimée et le processus de réécriture stoppé comme si le
- drapeau L était présent.
skip|S=num'
- (saute la/les règle(s) suivantes)skip=N, où N
- est le nombre de règles contenues dans le bloc "else" (ce qui est
- un comportement différent de celui du drapeau 'chain|C' !).type|T=type MIME'
- (force le type MIME).php d'être
- affichés par mod_php s'ils sont appelés
- avec l'extension .phps :
-
- RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]
-
RewriteRule. Flags est une liste de valeurs
+ déparées par des virgules, délimitée par des crochets, choisies
+ parmi les drapeaux de la table suivante. Vous trouverez plus de
+ détails et d'exemples, pour chaque drapeau, dans la documentation sur les drapeaux de
+ réécriture.
+
+| Flag and syntax | +Function | +
|---|---|
| B | +Escape non-alphanumeric characters before applying + the transformation. details ... | +
| chain|C | +Rule is chained to the following rule. If the rule fails, + the rule(s) chained to it will be skipped. details ... | +
| cookie|CO=NAME:VAL | +Sets a cookie in the client browser. Full syntax is: + CO=NAME:VAL[:domain[:lifetime[:path[:secure[:httponly]]]]] details ... + | +
| discardpath|DPI | +Causes the PATH_INFO portion of the rewritten URI to be + discarded. details + ... | +
| env|E=[!]VAR[:VAL] | +Causes an environment variable VAR to be set (to the + value VAL if provided). The form !VAR causes + the environment variable VAR to be unset.details ... | +
| forbidden|F | +Returns a 403 FORBIDDEN response to the client browser. + details ... | +
| gone|G | +Returns a 410 GONE response to the client browser. details ... | +
| Handler|H=Content-handler | +Causes the resulting URI to be sent to the specified + Content-handler for processing. details ... | +
| last|L | +Stop the rewriting process immediately and don't apply any + more rules. Especially note caveats for per-directory and + .htaccess context (see also the END flag). details ... | +
| next|N | +Re-run the rewriting process, starting again with the first + rule, using the result of the ruleset so far as a starting + point. details + ... | +
| nocase|NC | +Makes the pattern pattern comparison case-insensitive. + details ... | +
| noescape|NE | +Prevent mod_rewrite from applying hexcode escaping of + special characters in the result of the rewrite. details ... | +
| nosubreq|NS | +Causes a rule to be skipped if the current request is an + internal sub-request. details ... | +
| proxy|P | +Force the substitution URL to be internally sent as a proxy + request. details + ... | +
| passthrough|PT | +Forces the resulting URI to be passed back to the URL
+ mapping engine for processing of other URI-to-filename
+ translators, such as Alias or
+ Redirect. details ... |
+
| qsappend|QSA | +Appends any query string created in the rewrite target to + any query string that was in the original request URL. details ... | +
| redirect|R[=code] | +Forces an external redirect, optionally with the specified + HTTP status code. details ... + | +
| skip|S=num | +Tells the rewriting engine to skip the next num + rules if the current rule matches. details ... | +
| type|T=MIME-type | +Force the MIME-type of the target file + to be the specified type. details ... | +
Quand la chaîne de substitution commence par quelque chose comme
diff --git a/docs/manual/mod/mod_rewrite.xml b/docs/manual/mod/mod_rewrite.xml
index 50cedaecb01..e29aad930ce 100644
--- a/docs/manual/mod/mod_rewrite.xml
+++ b/docs/manual/mod/mod_rewrite.xml
@@ -1050,9 +1050,9 @@ Result:
-RewriteCond %{REMOTE_HOST} ^host1.* [OR]
-RewriteCond %{REMOTE_HOST} ^host2.* [OR]
-RewriteCond %{REMOTE_HOST} ^host3.*
+RewriteCond %{REMOTE_HOST} =host1 [OR]
+RewriteCond %{REMOTE_HOST} =host2 [OR]
+RewriteCond %{REMOTE_HOST} =host3
RewriteRule ...some special stuff for any of these hosts...
-RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
+RewriteCond %{HTTP_USER_AGENT} Mozilla
RewriteRule ^/$ /homepage.max.html [L]
-RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
+RewriteCond %{HTTP_USER_AGENT} Lynx
RewriteRule ^/$ /homepage.min.html [L]
RewriteRule ^/$ /homepage.std.html [L]
diff --git a/docs/manual/rewrite/remapping.html.en b/docs/manual/rewrite/remapping.html.en
index 9708e5da289..1bae21c312d 100644
--- a/docs/manual/rewrite/remapping.html.en
+++ b/docs/manual/rewrite/remapping.html.en
@@ -445,6 +445,8 @@ com http://www.example.com/
user-agent, which is requesting the content.
-RewriteCond %{HTTP_USER_AGENT} ^Mozilla/3.*
+RewriteCond %{HTTP_USER_AGENT} Mozilla/3.*
RewriteRule ^foo\.html$ foo.NS.html [L]
-RewriteCond %{HTTP_USER_AGENT} ^Lynx/ [OR]
-RewriteCond %{HTTP_USER_AGENT} ^Mozilla/[12]
+RewriteCond %{HTTP_USER_AGENT} Lynx/ [OR]
+RewriteCond %{HTTP_USER_AGENT} Mozilla/[12]
RewriteRule ^foo\.html$ foo.20.html [L]
RewriteRule ^foo\.html$ foo.32.html [L]
diff --git a/docs/manual/rewrite/remapping.xml b/docs/manual/rewrite/remapping.xml
index 458106587ab..ddf289199bf 100644
--- a/docs/manual/rewrite/remapping.xml
+++ b/docs/manual/rewrite/remapping.xml
@@ -448,6 +448,8 @@ com http://www.example.com/
user-agent, which is requesting the content.