From 7199f4a8a8d3920cec8d9775732caade33bbd95d Mon Sep 17 00:00:00 2001
From: Lucien Gentis 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.
[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
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
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)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
- 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)/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
- 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:
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
- /def
vers
- /ghi
avec 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
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
. 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 |
+
Quand la chaîne de substitution commence par quelque chose comme -- 2.47.2