From 76769e0d60edbbd91c7786fef9d7475dea0e8df8 Mon Sep 17 00:00:00 2001
From: Rich Bowen Pour les configurations de serveur sujettes à ce genre de
problème, il est préférable de désactiver la projection en mémoire
des fichiers servis en spécifiant : S'il fait l'objet d'une projection en mémoire par
- La directive La directive Par exemple, si le nom de la
machine hébergeant le serveur web est
httpd
.httpd
, la suppression ou la troncature d'un
+ fichier peut provoquer un crash de httpd
avec une
+ erreur de segmentation.httpd
, la suppression ou la troncature d'un
- fichier peut provoquer un crash de httpd
avec une
- erreur de segmentation.
EnableMMAP Off
ServerName
permet de définir
les protocole, nom d'hôte et port d'une requête que le serveur
utilise pour s'authentifier lui-même. Ceci est utile lors de la
- création de redirections d'URLs. Par exemple, si le nom de la
+ création de redirections d'URLs.ServerName
permet aussi
+ (éventuellement en conjonction avec la directive
+ ServerAlias
) d'identifier de manière unique
+ un serveur virtuel, lorsqu'elle est utilisée dans un contexte de serveurs virtuels à base de
+ noms.simple.example.com
, la machine possède l'alias
DNS www.example.com
, et si vous voulez que le serveur
diff --git a/docs/manual/mod/mod_proxy.html.en b/docs/manual/mod/mod_proxy.html.en
index c17d88defd..1d70a1be8e 100644
--- a/docs/manual/mod/mod_proxy.html.en
+++ b/docs/manual/mod/mod_proxy.html.en
@@ -724,7 +724,7 @@ proxied
Description: Override error pages for proxied content Syntax: ProxyErrorOverride On|Off
-Default: ProxyErrorOverride Off
+Context: server config, virtual host Context: server config, virtual host, directory Status: Extension Module: mod_proxy
@@ -843,13 +843,24 @@ through
thenCompatibility: Available in version 2.0 and later
- ProxyPass /mirror/foo/ http://backend.example.com/
+ <Location /mirror/foo/>
+
+ ProxyPass http://backend.example.com/
+
+ </Location>
will cause a local request for
http://example.com/mirror/foo/bar
to be internally converted
into a proxy request to http://backend.example.com/bar
.
The following alternative syntax is possible, however carries a + performance penalty when present in large numbers:
+ +
+ ProxyPass /mirror/foo/ http://backend.example.com/
+
If the first argument ends with a trailing /, the second argument should also end with a trailing / and vice @@ -861,6 +872,19 @@ through
The !
directive is useful in situations where you don't want
to reverse-proxy a subdirectory, e.g.
+ <Location /mirror/foo/>
+
+ ProxyPass http://backend.example.com/
+
+ </Location>
+ <Location /mirror/foo/i>
+
+ ProxyPass !
+
+ </Location>
+
ProxyPass /mirror/foo/i !
ProxyPass /mirror/foo http://backend.example.com
@@ -878,7 +902,10 @@ through
ProxyPass
rules starting with the
longest URLs first. Otherwise later rules for longer URLS will be hidden
by any earlier rule which uses a leading substring of the URL. Note that
- there is some relation with worker sharing.
ProxyPass
directive can be placed
+ in a Location
block, and the most
+ specific location will take precedence.
For the same reasons exclusions must come before the
general ProxyPass
directives.
ProxyErrorOverride On|Off
ProxyErrorOverride Off
http://example.com/
; alors la ligne
- ProxyPass /miroir/foo/ http://backend.example.com/
+ <Location /miroir/foo/>
+
+ ProxyPass http://backend.example.com/
+
+ </Location>
va convertir en interne toute requête pour
http://example.com/miroir/foo/bar
en une requête
mandatée pour http://backend.example.com/bar
.
La syntaxe alternative suivante est valide, bien qu'elle induise + une dégradation des performances lorsqu'elle est présente en grand + nombre :
+ +
+ ProxyPass /miroir/foo/ http://backend.example.com/
+
Si le premier argument se termine par un slash /, il doit en être de même pour le second argument @@ -955,6 +967,19 @@ l'espace d'URLs du serveur local
Le drapeau !
permet de soustraire un sous-répertoire
du mandat inverse, comme dans l'exemple suivant :
+ <Location /miroir/foo/>
+
+ ProxyPass http://backend.example.com/
+
+ </Location>
+ <Location /miroir/foo/i>
+
+ ProxyPass !
+
+ </Location>
+
ProxyPass /miroir/foo/i !
ProxyPass /miroir/foo http://backend.example.com
@@ -972,7 +997,10 @@ l'espace d'URLs du serveur local
l'URL la plus longue à la plus courte. Dans le cas contraire, les
règles situées après une règle dont l'URL correspond au début de
leur propre URL seront ignorées. Notez que tout ceci est en
- relation avec le partage de workers.
ProxyPass
dans une section
+ Location
, et c'est la section
+ la plus spécifique qui l'emportera.
Pour les mêmes raisons, les exclusions doivent se situer
avant les directives ProxyPass
diff --git a/docs/manual/mod/mod_proxy.xml.ja b/docs/manual/mod/mod_proxy.xml.ja
index fa5d359230..3e39b9932e 100644
--- a/docs/manual/mod/mod_proxy.xml.ja
+++ b/docs/manual/mod/mod_proxy.xml.ja
@@ -1,7 +1,7 @@
-
+
-
Ce document décrit les drapeaux disponibles dans la directive
RewriteRule
, en fournissant
-des explications détaillées et des exemples. Vous n'y trouverez pas
-une liste exhaustive de tous les drapeaux disponibles, c'est pourquoi
-vous devez aussi consulter la documentation de référence.
Le comportement des directives RewriteRule
peut être modifié par un ou
+
Le comportement d'une directive RewriteRule
peut être modifié par un ou
plusieurs drapeaux. Les drapeaux sont situés en fin de règle, entourés
de crochets, et séparés le cas échéant par des virgules.
@@ -48,45 +64,112 @@ qu'une forme longue, comme
cookie
. Certains drapeaux
peuvent avoir un ou plusieurs arguments. Les drapeaux sont insensibles à
la casse.
Chaque drapeau possède une forme longue et une forme courte. Bien que +
Chaque drapeau (à quelques exceptions près) possède une forme longue et une forme courte. Bien que la forme courte soit la plus couramment utilisée, nous vous recommandons de vous familiariser avec les drapeaux sous leur forme longue, afin de bien mémoriser ce que chaque drapeau est supposé faire.
+Les drapeaux qui modifient les métadonnées associées à la requête +(T=, H=, E=) n'ont aucun effet dans un contexte de répertoire ou de +fichier htaccess, lorsqu'une substitution (autre que '-') est effectuée +au cours de la même passe du processus de réécriture. +
+Chaque drapeau disponible est présenté ici, avec un exemple d'utilisation.
- -Avec le drapeau [B], la directive RewriteRule
échappe les caractères
non-alphanumériques avant d'appliquer la transformation.
mod_rewrite
doit supprimer les séquences d'échappement
+des URLs avant leur
+mise en correspondance avec le système de fichiers ; les séquences
+d'échappement sont donc supprimées des références arrières au moment où
+ces dernières sont appliquées. Avec le drapeau B, les caractères
+non-alphanumériques des références arrières seront échappés. Considérons
+par exemple cette règle :
+RewriteRule ^(/.*)$ /index.php?show=$1
+
Avec cet exemple, /C++
sera réécrit en
+/index.php?show=/C++
. Mais /C%2b%2b
sera lui
+aussi réécrit en /index.php?show=/C++
, car le caractère
+%2b
aura été "déséchappé". Avec le drapeau B par contre,
+/C%2b%2b
sera réécrit en
+/index.php?show=/C%2b%2b
.
Ce processus d'échappement est en particulier nécessaire dans le +contexte d'un mandataire, où l'accès au serveur d'arrière-plan échouera +si on présente à ce dernier une URL non échappée.
+ +Le drapeau [C] ou [chain] indique que la règle RewriteRule
est chaînée avec la
suivante. Autrement dit, si la règle s'applique, elle est traitée
normalement et passe le contrôle à la règle suivante. Par contre, si
elle ne s'applique pas, la règle suivante, ainsi que toutes les règles
chaînées qui suivent, seront sautées.
Le drapeau [CO], ou [cookie], vous permet de définir un cookie
lorsqu'une règle RewriteRule
-s'applique. Il possède cinq arguments dont trois sont obligatoires et
-deux optionnels.
Vous devez déclarer un nom et une valeur pour définir le cookie, -ainsi que le domaine pour lequel vous souhaitez que le cookie soit -valide. Vous pouvez aussi définir la durée de vie du cookie, ainsi que -le chemin pour lequel il doit être renvoyé.
-Par défaut, la durée de vie du cookie correspond à la session du -navigateur en cours.
-Par défaut, le chemin pour lequel le cookie sera valide est "/" - -c'est à dire, pour tout le site web.
+s'applique. Il possède trois arguments obligatoires et +cinq arguments optionnels. + +La syntaxe complète de ce drapeau, avec tous ses attributs, est la +suivante :
+ +
+[CO=NAME:VALUE:domain:lifetime:path:secure:httponly]
+
Vous devez déclarer un nom et une valeur pour que le cookie puisse +être défini.
+ +Vous pouvez aussi définir les valeurs suivantes :
+ +www.example.com
, ou un
+domaine, comme .example.com
. Il doit comporter au moins
+deux parties séparées par un point. C'est à dire que vous ne pouvez pas
+utiliser les valeurs .com
ou .net
. En effet,
+ce style de cookie est interdit par le modèle de sécurité des cookies./clients/
or
+/fichiers/telechargement/
./
- c'est à dire l'ensemble du
+site web.secure
,
+true
, ou 1
, le cookie ne pourra être transmis
+que dans le cadre d'une connexion sécurisée (https).HttpOnly
,
+true
, ou 1
, le cookie aura son drapeau
+HttpOnly
activé, ce qui signifie qu'il sera inaccessible au
+code JavaScript pour les navigateurs qui supportent cette
+fonctionnalité.Voici un exemple :
@@ -103,16 +186,40 @@ valide pour tout h
durée de vie est limitée à 1440 minutes (24 heures), et il sera renvoyé
pour tous les URIs.
Avec le drapeau DPI, la partie PATH_INFO de l'URI réécrit est supprimée.
- - - - -Ce drapeau est disponible dans les versions 2.2.12 et supérieures.
+Dans un contexte de répertoire, l'URI mis en comparaison par chaque
+règle RewriteRule
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é fourni par le +client, le résultat d'une passe précédente du processus de réécriture, +ou le résultat de la règle précédente dans le processus courant de +réécriture.
+ +Par contre, la partie PATH_INFO ajoutée à l'URI avant chaque règle ne
+reflète que la valeur de PATH_INFO avant la passe courante du processus
+de réécriture. En conséquence, si de larges portions de l'URI
+correspondent et sont traduites via plusieurs directives
+RewriteRule
, sans prendre en compte
+quelles parties de l'URI provenaient du PATH_INFO courant, l'URI final
+pourra se voir ajouter plusieurs copies de PATH_INFO.
Utilisez ce drapeau pour toute substitution où la présence du PATH_INFO qui +résultait de la mise en correspondance précédente de cette requête avec +le système de fichier n'est pas nécessaire. Avec ce drapeau, le +PATH_INFO établi avant que cette passe du processus de réécriture ne +débute est oublié. PATH_INFO ne sera pas recalculé tant que la passe +courante du processus de réécriture ne sera pas achevée. Les règles +suivantes de cette passe ne verront que le résultat direct des +substitutions, sans aucun PATH_INFO ajouté.
+Avec le drapeau [E], ou [env], vous pouvez définir la valeur d'une variable d'environnement. Notez que certaines variables d'environnement peuvent être définies après le traitement de la règle, annulant par @@ -120,6 +227,28 @@ la-m sur les variables d'environnement pour plus de détails sur le fonctionnement des variables d'environnement.
+La syntaxe complète pour ce drapeau est :
+ +
+[E=VAR:VAL]
+
VAL
peut comporter des références arrières
+($N
ou %N
) qui seront développées.
En utilisant la version courte
+ +
+[E=VAR]
+
vous pouvez définir la variable d'environnement nommée
+VAR
avec une valeur vide.
Les variables d'environnement s'emploient dans différents contextes, +comme les programmes CGI, d'autres directives RewriteRule, ou des +directives CustomLog.
+L'exemple suivant définit une variable d'environnement nommée 'image' avec une valeur de '1' si l'URI de la requête correspond à un fichier image. Cette variable d'environnement est ensuite utilisée pour exclure @@ -133,10 +262,10 @@ CustomLog logs/access_log combined env=!image
Notez que le même effet peut être obtenu à l'aide de la directive
SetEnvIf
. Cette technique
est présentée à titre d'exemple et non de recommandation.
L'utilisation du drapeau [F] permet de faire envoyer par Apache au +
L'utilisation du drapeau [F] permet de faire envoyer par le serveur au
client un code de statut "403 Forbidden". Le même effet peut être obtenu à
l'aide de la directive Deny
,
mais ce drapeau offre plus de souplesse dans l'attribution d'un statut
@@ -154,10 +283,13 @@ qui signifie que l'URI de la requ
raison de réécrire un URI, si vous avez l'intention d'interdire la
requête.
Lorsqu'on utilise [F], [L] est implicite - c'est à dire que la +réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.
- -Le drapeau [G] permet de faire envoyer par Apache un code de statut +
Le drapeau [G] permet de faire envoyer par le serveur un code de statut "410 Gone" avec la réponse. Ce code indique qu'une ressource qui était disponible auparavant ne l'est plus actuellement.
@@ -168,8 +300,12 @@ disponible auparavant ne l'est plus actuellement. RewriteRule ancienne-ressource - [G,NC]Lorsqu'on utilise [F], [L] est implicite - c'est à dire que la +réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.
-Force le traitement de la requête résultante par le gestionnaire
spécifié. Par exemple, on peut utiliser ce drapeau pour forcer
l'interprétation de tous les fichiers sans extension par le gestionnaire
@@ -188,13 +324,13 @@ certain gestionnaire en fonction de certaines conditions. Par exemple,
l'extrait suivant utilisé dans un contexte de niveau serveur permet de
faire en sorte que les fichiers .php
soient
affichés par mod_php
dans le cas où ils font
-l'objet d'une requête avec l'extension .phps
:
-
.phps
:
RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
L'expression rationnelle ci-dessus -
^(/source/.+\.php)s$
- va correspondre à toute requête qui
débutera par /source/
, continuera par 1 ou n caractères
@@ -203,13 +339,16 @@ correspondance captur
rationnelle.
Lorsque le drapeau [L] est présent, mod_rewrite
arrête le traitement du jeu de règles. Cela signifie dans la plupart des
situations que si la règle s'applique, aucune autre règle ne sera
-traitée.
last
, ou
+à la commande break
en C. Utilisez ce drapeau pour indiquer
+que la règle courante doit être appliquée immédiatement, sans tenir
+compte des règles ultérieures.
Si vous utilisez des règles RewriteRule
dans des fichiers
.htaccess
ou des sections <Directory>
, il est important d'avoir quelques
@@ -237,15 +376,17 @@ directive
la requête concerne déjà
index.php
, la directive RewriteRule
sera sautée.
-RewriteCond %{REQUEST_URI} !=index\.php
-RewriteRule ^(.*) index.php?req=$1 [L]
+RewriteBase /
+RewriteCond %{REQUEST_URI} !=/index.php
+RewriteRule ^(.*) /index.php?req=$1 [L,PT]
Le drapeau [N] provoque un redémarrage du traitement des règles -depuis le début ; à utiliser avec précautions car il peut provoquer un -bouclage infini. +depuis le début, en utilisant le résultat du jeu de règles, sous +réserve qu'il existe un point de démarrage ; à utiliser avec précautions +car il peut provoquer un bouclage infini.
Le drapeau [Next] peut servir, par exemple,
@@ -265,9 +406,9 @@ dire, tant que l'URI contient un A
),
effectuer la substitution (c'est à dire, remplacer le A
par
un B
).
Avec le drapeau [NC], le modèle de la règle RewriteRule
est comparé à la requête de
manière insensible à la casse. C'est à dire que cette comparaison
s'effectue sans tenir compte des majuscules/minuscules dans l'URI
@@ -281,9 +422,9 @@ bien que .JPG
seront accept
RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]
Par défaut, les caractères spéciaux, comme &
et
?
, sont convertis en leur équivalent
hexadécimal. Le drapeau [NE] permet d'éviter cette conversion.
@@ -300,22 +441,36 @@ aurait
qui aurait provoqué un code d'erreur "404 Not Found".
Le drapeau [NS] empêche la règle de s'appliquer aux sous-requêtes. Par exemple, une page incluse au moyen d'une SSI (Server -Side Include) est une sous-requête, et vous ne voudrez peut-être pas que -la réécriture s'applique à ces sous-requêtes.
+Side Include) est une sous-requête, et vous ne voudrez probablement pas que +la réécriture s'applique à ces sous-requêtes. Ainsi, lorsque +mod_dir
recherche des informations à propos des
+fichiers par défaut du répertoire (comme les fichiers
+index.html
), il s'agit d'une sous-requête interne, et vous
+ne désirez en général pas que ces sous-requêtes soient réécrites. Cette
+réécriture
+n'est pas toujours utile pour les sous-requêtes, et peut même causer des
+erreurs si l'ensemble du jeu de règles est appliqué. L'utilisation de
+ce drapeau permet d'exclure les règles qui peuvent poser problème.
+
+Comment déterminer si vous devez utiliser cette règle ou non : si +vous préfixez les URLs avec des scripts CGI, afin de forcer leur +traitement par le script CGI, vous vous exposez à des problèmes (ou du +moins à une surcharge significative) avec les sous-requêtes. Dans ces +cas, vous devez utiliser ce drapeau.
Les images, scripts java, ou fichiers css, chargés en tant que partie d'une page html, ne sont pas des sous-requêtes - le navigateur les appelle sous forme de requêtes HTTP à part entière.
- - -L'utilisation du drapeau [P] entraîne le traitement de la requête par
le module mod_proxy
, et ceci via une requête de
mandataire. Par exemple, si vous voulez que toutes les requêtes d'images
@@ -330,9 +485,22 @@ RewriteRule (.*)\.(jpg|gif|png) http://images.example.com$1.$2 [P]
autrement dit, la requête est immédiatement envoyée au mandataire, et
toute règle ultérieure sera ignorée.
+Vous devez vous assurer que la chaîne de substitution soit un URI valide
+(commençant typiquement par http://
nom-serveur)
+qui puisse être traitée par le module mod_proxy
. Dans
+le cas contraire, le module mandataire vous renverra une erreur.
+L'utilisation de ce drapeau implémente de manière plus puissante la
+directive ProxyPass
, pour
+faire correspondre le contenu distant à l'espace de nommage du serveur
+local.
Note: mod_proxy
doit être activé pour pouvoir
+utiliser ce drapeau.
Par défaut, la cible (ou chaîne de substitution) d'une règle
@@ -341,7 +509,7 @@ par contre, elle est trait
drapeau [PT], le résultat de la règle RewriteRule
est passé à nouveau au
système de mise en correspondance des URLs avec le système de fichiers,
de façon à ce que les systèmes de mise en correspondance basés sur les
-chemins de fichiers, comme la directive Alias
, par exemple, puissent avoir une
+chemins de fichiers, comme la directive Alias
, Redirect
, ou ScriptAlias
, par exemple, puissent avoir une
chance d'accomplir leur tâche.
Avec le drapeau PT
, le drapeau L
est
+implicite : la réécriture s'arrêtera afin de transmettre la requête à la
+phase suivante du traitement.
Notez que le drapeau PT
est implicite dans des contextes
+de répertoire comme les sections <Directory>
ou les fichiers
+.htaccess
. Le seul moyen de contourner ceci consiste à
+réécrire vers -
.
Quand l'URI de remplacement contient une chaîne de requête, le
comportement par défaut de la règle RewriteRule
est de supprimer la
@@ -384,23 +561,59 @@ RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
même requête sera réécrite en
/page.php?page=123
-
autrement dit, la chaîne de requête (query string
) existante sera supprimée.
+Lorsque l'URI de la requête contient une chaîne de paramètres, et si
+l'URI cible n'en contient pas, le comportement par défaut de la
+directive RewriteRule
consiste à copier cette
+chaîne de paramètres dans l'URI cible. Avec le drapeau [QSD], la chaîne
+de paramètres est supprimée.
+
Ce drapeau est disponible dans les versions 2.4.0 et supérieures.
-+Lorsque les drapeaux [QSD] et [QSA] sont utilisés ensemble, c'est le +drapeau [QSD] qui l'emporte. +
+ ++Si l'URI cible possède une chaîne de paramètres, le comportement par +défaut sera respecté - c'est à dire que la chaîne de paramètres +originale sera supprimée et remplacée par la chaîne de paramètres de +l'URI cible. +
+ +
L'utilisation du drapeau [R] provoque l'envoi d'une redirection au
navigateur. Si une URL pleinement qualifiée (FQDN - fully qualified domain name)
est spécifiée (c'est à dire incluant http://nom-du-serveur/
),
une redirection sera effectuée vers cette adresse. Dans le cas contraire,
- c'est le nom du serveur local qui sera utilisé pour générer l'URL envoyée avec la
-redirection.
+ le protocole courant, le nom du serveur et le numéro de port seront
+ utilisés pour générer l'URL envoyée avec la redirection.
-Un code de statut entre 300 et 399 peut être spécifié, le code 302 étant -utilisé par défaut si aucun code n'est spécifié. +
Tout code de statut de réponse HTTP valide peut être +spécifié, en utilisant la syntaxe [R=305], le code de statut 302 étant +utilisé par défaut si aucun code n'est spécifié. Le code de statut +spécifié n'est pas nécessairement un code de statut de redirection (3xx).
+Si le code de statut est en dehors de la plage des codes de
+redirection (300-399), la chaîne de substitution est entièrement
+supprimée, et la réécriture s'arrête comme si le drapeau L
+était utilisé.
En plus des codes de statut de réponse, vous pouvez spécifier les
+codes de redirection en utilisant leurs noms symboliques :
+temp
(défaut), permanent
, ou
+seeother
.
Vous utiliserez presque toujours [R] en conjonction avec [L] (c'est à dire [R,L]), car employé seul, le drapeau [R] préfixe l'URI avec @@ -409,9 +622,9 @@ dire [R,L]), car employ avertissements 'Invalid URI in request'.
- - -Le drapeau [S] sert à sauter des règles que vous ne voulez pas voir
exécuter. Ceci peut s'interpréter comme une instruction
goto
dans votre jeu de règles de réécriture. Dans
@@ -433,11 +646,15 @@ RewriteRule (.*\.html) docs.php?$1
RewriteCond
ne s'applique
qu'à la règle qui la suit immédiatement. Ainsi, si vous voulez
qu'une directive RewriteCond
s'applique à plusieurs règles
-RewriteRule
, vous pouvez utiliser le drapeau [Skip].
RewriteRule
, une technique possible consiste à inverser ces
+conditions et à utiliser le drapeau [Skip]. Cette technique permet
+d'élaborer des pseudo-constructions if-then-else : la dernière règle du
+bloc then contiendra skip=N
, où N est le nombre de règles
+contenues dans le bloc else.
-Définit le type MIME de la réponse résultante renvoyée. L'effet est
identique à celui de la directive AddType
.
+Dans un contexte de niveau répertoire, n'utilisez que -
+(tiret) comme substitution, dans toute la séquence de réécriture de
+mod_rewrite, sinon le type MIME défini avec ce drapeau
+sera perdu suite à un retraitement interne (y compris les séquences de
+réécriture suivantes de mod_rewrite). Dans ce contexte, vous pouvez
+utiliser le drapeau L
pour terminer la séquence
+courante de réécriture de mod_rewrite.