From: Lucien Gentis Ce document est un complément à la documentation de référence de
@@ -84,25 +82,25 @@ correspondance Dans le second exemple, plutôt que de rejeter la requête,
nous affichons une autre image à la place. Dans le troisième exemple, nous redirigeons la requête vers
une image appartenant à un autre site. De tous ces exemples, les deux derniers semblent les plus
@@ -119,8 +117,8 @@ RewriteRule \.(gif|jpg|png)$ http://other.example.com/image.gif [R,NC]
simplement interdire l'accès à la ressource, vous pouvez y
parvenir sans utiliser mod_rewrite :RewriteCond %{HTTP_REFERER} !^$
-RewriteCond %{HTTP_REFERER} !www.example.com [NC]
-RewriteRule \.(gif|jpg|png)$ - [F,NC]
+RewriteCond "%{HTTP_REFERER}" "!^$"
+RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC]
+RewriteRule "\.(gif|jpg|png)$" "-" [F,NC]
RewriteCond %{HTTP_REFERER} !^$
-RewriteCond %{HTTP_REFERER} !www.example.com [NC]
-RewriteRule \.(gif|jpg|png)$ /images/go-away.png [R,NC]
+RewriteCond "%{HTTP_REFERER}" "!^$"
+RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC]
+RewriteRule "\.(gif|jpg|png)$" "/images/go-away.png" [R,NC]
RewriteCond %{HTTP_REFERER} !^$
-RewriteCond %{HTTP_REFERER} !www.example.com [NC]
-RewriteRule \.(gif|jpg|png)$ http://other.example.com/image.gif [R,NC]
+RewriteCond "%{HTTP_REFERER}" "!^$"
+RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC]
+RewriteRule "\.(gif|jpg|png)$" "http://other.example.com/image.gif" [R,NC]
SetEnvIf Referer example\.com localreferer
-<FilesMatch \.(jpg|png|gif)$>
+
seulement depuis une source particulière, vous pouvez aussi
spécifier un intervalle d'adresses IP.SetEnvIf Referer "example\.com" localreferer
+<FilesMatch "\.(jpg|png|gif)$">
Require env localreferer
</FilesMatch>
@@ -168,9 +166,9 @@ RewriteRule \.(gif|jpg|png)$ http://other.example.com/image.gif [R,NC]
RewriteCond %{HTTP_USER_AGENT} ^NameOfBadRobot -RewriteCond %{REMOTE_ADDR} =123\.45\.67\.[8-9] -RewriteRule ^/secret/files/ - [F]+
RewriteCond "%{HTTP_USER_AGENT}" "^NameOfBadRobot" +RewriteCond "%{REMOTE_ADDR}" "=123\.45\.67\.[8-9]" +RewriteRule "^/secret/files/" "-" [F]@@ -181,8 +179,8 @@ RewriteRule ^/secret/files/ - [F] Vous pouvez cependant parvenir au même résultat sans utiliser mod_rewrite via la méthode alternative suivante : -
SetEnvIfNoCase User-Agent ^NameOfBadRobot goaway -<Location /secret/files> +SetEnvIfNoCase User-Agent "^NameOfBadRobot" goaway +<Location "/secret/files"> <RequireAll> Require all granted Require not env goaway @@ -220,10 +218,10 @@ RewriteRule ^/secret/files/ - [F]
RewriteEngine on -RewriteMap hosts-deny txt:/path/to/hosts.deny -RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR] -RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND -RewriteRule ^ - [F]+RewriteMap hosts-deny "txt:/path/to/hosts.deny" +RewriteCond "${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}" "!=NOT-FOUND" [OR] +RewriteCond "${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}" "!=NOT-FOUND" +RewriteRule "^" "-" [F]
Le jeu de règles suivant utilise un fichier de correspondances pour
associer chaque Referer à une cible de redirection. Le fichier de correspondances contient les cibles de
diff --git a/docs/manual/rewrite/access.xml.meta b/docs/manual/rewrite/access.xml.meta
index 8ffc1d8a497..cda0183580c 100644
--- a/docs/manual/rewrite/access.xml.meta
+++ b/docs/manual/rewrite/access.xml.meta
@@ -8,6 +8,6 @@
@@ -274,15 +272,15 @@ bsdti1.sdm.de -
RewriteMap deflector txt:/path/to/deflector.map
+
RewriteMap deflector "txt:/path/to/deflector.map"
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}} =-
-RewriteRule ^ %{HTTP_REFERER} [R,L]
+RewriteCond "%{HTTP_REFERER}" !=""
+RewriteCond "${deflector:%{HTTP_REFERER}}" "=-"
+RewriteRule "^" "%{HTTP_REFERER}" [R,L]
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^ ${deflector:%{HTTP_REFERER}} [R,L]
+RewriteCond "%{HTTP_REFERER}" !=""
+RewriteCond "${deflector:%{HTTP_REFERER}|NOT-FOUND}" "!=NOT-FOUND"
+RewriteRule "^" "${deflector:%{HTTP_REFERER}}" [R,L]
Ce document complète la documentation de référence du @@ -105,8 +103,8 @@ http://serveur_physique_utilisateur1/u/utilisateur/chemin possèdera pas d'entrée dans la table de correspondances :
RewriteEngine on -RewriteMap users-to-hosts txt:/path/to/map.users-to-hosts -RewriteRule ^/u/([^/]+)/?(.*) http://${users-to-hosts:$1|server0}/u/$1/$2+RewriteMap users-to-hosts "txt:/path/to/map.users-to-hosts" +RewriteRule "^/u/([^/]+)/?(.*)" "http://${users-to-hosts:$1|server0}/u/$1/$2"
L'opérateur -U
permet de déterminer si la chaîne
@@ -181,8 +179,8 @@ RewriteRule ^(.+)\.html$ /regenerate_page.cgi [PT,L]
serveurs.
RewriteEngine on -RewriteMap lb rnd:/path/to/serverlist.txt -RewriteRule ^/(.*) http://${lb:serveurs}/$1 [P,L]+RewriteMap lb "rnd:/path/to/serverlist.txt" +RewriteRule "^/(.*)" "http://${lb:serveurs}/$1" [P,L]
liste-serveurs.txt
contiendra la liste des serveurs :
RewriteEngine on -RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2/$1/public_html$3+RewriteRule "^/~(([a-z])[a-z0-9]+)(.*)" "/home/$2/$1/public_html$3" @@ -294,10 +292,11 @@ RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2 -
+RewriteEngine on -+RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 -+RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900 -+RewriteRule ^foo\.html$ foo.day.html [L]+
RewriteEngine on +RewriteCond "%{TIME_HOUR}%{TIME_MIN}" ">0700" +RewriteCond "%{TIME_HOUR}%{TIME_MIN}" "<1900" +RewriteRule "^foo\.html$" "foo.day.html" [L] +RewriteRule "^foo\.html$" "foo.night.html"
Avec cet exemple, l'URL Plus loin dans votre jeu de règles, vous pouvez vérifier le
contenu de cette variable d'environnement via une directive
RewriteCond : Ce document est un complément à la Documentation de référence de
@@ -98,12 +96,16 @@ rediriger toutes les URLs de niveaux inf
Pour rediriger un nom d'hôte vers un autre nom d'hôte, par exemple
+ Pour rediriger les URLs foo.html
renvoie
@@ -340,14 +339,14 @@ RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2
RewriteEngine on
-RewriteRule ^/cheval/(.*) /poney/$1 [E=rewritten:1]
+RewriteRule "^/cheval/(.*)" "/poney/$1" [E=rewritten:1]
RewriteCond %{ENV:rewritten} =1
+RewriteCond "%{ENV:rewritten}" =1
diff --git a/docs/manual/rewrite/advanced.xml.meta b/docs/manual/rewrite/advanced.xml.meta
index 907cc2406d5..98192e70187 100644
--- a/docs/manual/rewrite/advanced.xml.meta
+++ b/docs/manual/rewrite/advanced.xml.meta
@@ -8,6 +8,6 @@
Redirect /one/ http://one.example.com/
+example.com
vers www.example.com
, voir la
+méthode Noms d'hôtes canoniques.http
vers https
,
utilisez cette définition :<VirtualHost *:80>
ServerName www.example.com
-Redirect / https://www.example.com/
+Redirect "/" "https://www.example.com/"
</VirtualHost >
<VirtualHost *:443>
@@ -136,8 +138,8 @@ possible d'effectuer cette mise en correspondance avec
mod_rewrite
, il est préférable d'utiliser la directive
Alias
pour des raisons de simplicité et de performances.
Alias /cats -/var/www/virtualhosts/felines/htdocs+
Alias "/cats" +"/var/www/virtualhosts/felines/htdocs"
@@ -182,7 +184,7 @@ cela semble
La directive RewriteRule
fournit le drapeau [P] qui permet de faire passer les URIs
réécrits par mod_proxy
.
RewriteRule ^/?images(.*) http://serveur-images.local/images$1 [P]+
RewriteRule "^/?images(.*)" "http://serveur-images.local/images$1" [P]
Cependant, dans les nombreux cas où aucune correspondance au modèle
@@ -190,14 +192,14 @@ n'est vraiment n
préférable d'utiliser la directive ProxyPass
. L'exemple précédent pourrait
être remplacé par :
ProxyPass /images/ http://serveur-images.local/images/+
ProxyPass "/images/" "http://serveur-images.local/images/"
Que vous utilisiez RewriteRule
ou ProxyPass
, vous devrez dans tous les cas
utiliser aussi la directive ProxyPassReverse
pour intercepter les
redirections en provenance du serveur d'arrière-plan :
ProxyPassReverse /images/ http://serveur-images.local/images/+
ProxyPassReverse "/images/" "http://serveur-images.local/images/"
Vous devrez cependant tout de même utiliser RewriteRule
@@ -222,7 +224,7 @@ directive <If>
suit :
<If "req('Host') != 'www.example.com'"> - Redirect / http://www.example.com + Redirect "/" "http://www.example.com" </If>diff --git a/docs/manual/rewrite/avoid.xml.meta b/docs/manual/rewrite/avoid.xml.meta index 405691d6afd..9d51904e7ba 100644 --- a/docs/manual/rewrite/avoid.xml.meta +++ b/docs/manual/rewrite/avoid.xml.meta @@ -8,6 +8,6 @@
Ce document décrit les drapeaux disponibles dans la directive
RewriteRule
, en fournissant
@@ -97,7 +95,7 @@ ces derni
non-alphanumériques des références arrières seront échappés. Considérons
par exemple cette règle :
RewriteRule ^search/(.*)$ /search.php?term=$1+
RewriteRule "^search/(.*)$" "/search.php?term=$1"
Soit le terme de recherche 'x & y/z' ; un navigateur va le coder @@ -192,7 +190,7 @@ fonctionnalit
Voici un exemple :
RewriteEngine On -RewriteRule ^/index\.html - [CO=frontdoor:yes:.example.org:1440:/]+RewriteRule "^/index\.html" "-" [CO=frontdoor:yes:.example.org:1440:/]
Dans l'exemple ci-dessus, la règle ne réécrit @@ -281,8 +279,8 @@ image. Cette variable d'environnement est ensuite utilis une telle requête du journal des accès.
-RewriteRule \.(png|gif|jpg) - [E=image:1]
-CustomLog logs/access_log combined env=!image
+RewriteRule "\.(png|gif|jpg)" "-" [E=image:1]
+CustomLog "logs/access_log" combined env=!image
Notez que le même effet peut être obtenu à l'aide de la directive @@ -310,7 +308,7 @@ Forbidden.
La règle suivante va interdire la téléchargement de fichiers
.exe
depuis votre serveur.
RewriteRule \.exe - [F]+
RewriteRule "\.exe" "-" [F]
Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce @@ -331,7 +329,7 @@ disponible auparavant ne l'est plus actuellement.
Comme dans le cas du drapeau [F], on utilise en général la syntaxe "-" pour la cible de réécriture lorsqu'on utilise le drapeau [G] :
-RewriteRule oldproduct - [G,NC]+
RewriteRule "oldproduct" "-" [G,NC]
Lorsqu'on utilise [G], [L] est implicite - c'est à dire que la @@ -345,8 +343,7 @@ sp l'interprétation de tous les fichiers sans extension par le gestionnaire php :
-RewriteRule !\. - -[H=application/x-httpd-php]+
RewriteRule "!\." "-" [H=application/x-httpd-php]
@@ -360,7 +357,7 @@ 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
:
RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]+
RewriteRule "^(/source/.+\.php)s$" "$1" [H=application/x-httpd-php-source]@@ -414,9 +411,9 @@ de requ directive
RewriteCond
permet de s'assurer que si
la requête concerne déjà index.php
, la directive RewriteRule
sera sautée.
-RewriteBase / -RewriteCond %{REQUEST_URI} !=/index.php -RewriteRule ^(.*) /index.php?req=$1 [L,PT]+
RewriteBase "/" +RewriteCond "%{REQUEST_URI}" "!=/index.php" +RewriteRule "^(.*)" "/index.php?req=$1" [L,PT]
RewriteRule (.*)A(.*) $1B$2 [N]+
RewriteRule "(.*)A(.*)" "$1B$2" [N]
Vous pouvez vous représenter ce traitement comme une boucle
@@ -447,9 +444,9 @@ un B
).
# On veut remplacer 1 caractère à chaque itération de la boucle -RewriteRule (.+)[><;]$ $1 [N=64000] +RewriteRule "(.+)[><;]$" "$1" [N=64000] # ... ou s'arrêter après 10 itérations -RewriteRule (.+)[><;]$ $1 [N=10]+RewriteRule "(.+)[><;]$" "$1" [N=10]
.jpg
aussi
bien que .JPG
seront acceptés.
-RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]+
RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]
.JPG
seront accept
hexadécimal. Le drapeau [NE] permet d'éviter cette conversion.
-RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]+
RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]
@@ -521,7 +518,7 @@ mandataire. Par exemple, si vous voulez que toutes les requ soient traitées par un serveur d'images annexe, vous pouvez utiliser une règle de ce style :
-RewriteRule /(.*)\.(jpg|gif|png)$ http://images.example.com/$1.$2 [P]+
RewriteRule "/(.*)\.(jpg|gif|png)$" "http://images.example.com/$1.$2" [P]
L'utilisation du drapeau [P] provoque aussi l'effet du drapeau [L] -
@@ -581,8 +578,8 @@ Si par exemple, vous avez un Alias
sera bien évalué.
Alias /icons /usr/local/apache/icons -RewriteRule /pics/(.+)\.jpg$ /icons/$1.gif [PT]+
Alias "/icons" "/usr/local/apache/icons" +RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]
@@ -613,8 +610,7 @@ Avec le drapeau [QSA], les cha
Considérons la règle suivante :
-RewriteRule /pages/(.+) /page.php?page=$1 -[QSA]+
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
Avec le drapeau [QSA], une requête pour
@@ -694,13 +690,13 @@ Ceci peut s'interpr
l'exemple suivant, nous ne voulons exécuter la règle RewriteRule
que si l'URI demandé ne
correspond pas à un fichier existant.
# La requête concerne-t-elle un fichier qui n'existe pas ? -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond "%{REQUEST_FILENAME}" "!-f" +RewriteCond "%{REQUEST_FILENAME}" "!-d" # Si c'est la cas, on saute les deux règles de réécriture suivantes -RewriteRule .? - [S=2] +RewriteRule ".?" "-" [S=2] -RewriteRule (.*\.gif) images.php?$1 -RewriteRule (.*\.html) docs.php?$1+RewriteRule "(.*\.gif)" "images.php?$1" +RewriteRule "(.*\.html)" "docs.php?$1" @@ -715,18 +711,18 @@ d' bloc then contiendra
skip=N
, où N est le nombre de règles
contenues dans le bloc else :
# Est-ce que le fichier existe ? -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond "%{REQUEST_FILENAME}" "!-f" +RewriteCond "%{REQUEST_FILENAME}" "!-d" # Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza. -RewriteRule .? - [S=3] +RewriteRule ".?" "-" [S=3] # Si le fichier existe, alors : -RewriteRule (.*\.gif) images.php?$1 - RewriteRule (.*\.html) docs.php?$1 +RewriteRule "(.*\.gif)" "images.php?$1" + RewriteRule "(.*\.html)" "docs.php?$1" # Skip past the "else" stanza. - RewriteRule .? - [S=1] + RewriteRule ".?" "-" [S=1] # ELSE... -RewriteRule (.*) 404.php?file=$1 +RewriteRule "(.*)" "404.php?file=$1 # END@@ -744,7 +740,7 @@ du code source Perl en tant que plein texte, s'il est requis d'une certaine manière :
# Sert les fichier .pl en tant que plein texte -RewriteRule \.pl$ - [T=text/plain]+RewriteRule "\.pl$" "-" [T=text/plain]
Ou encore, si vous possédez une caméra qui produit des fichiers @@ -752,7 +748,7 @@ images jpeg sans extension, vous pouvez forcer le renvoi de ces images avec le type MIME correct en se basant sur le nom du fichier :
# Les fichiers dont le nom contient 'IMG' sont des images jpg. -RewriteRule IMG - [T=image/jpg]+RewriteRule "IMG" "-" [T=image/jpg]
Notez cependant qu'il s'agit d'un exemple trivial, et que le problème
diff --git a/docs/manual/rewrite/flags.xml.meta b/docs/manual/rewrite/flags.xml.meta
index e4f3ee6f495..912229af035 100644
--- a/docs/manual/rewrite/flags.xml.meta
+++ b/docs/manual/rewrite/flags.xml.meta
@@ -8,6 +8,6 @@
Ce document est un complément de la documentation de référence du module @@ -64,9 +62,9 @@ correspondance
RewriteEngine on -RewriteBase /produits/ -RewriteRule ^widget/(.*)$ http://produits.example.com/widget/$1 [P] -ProxyPassReverse /produits/objet/ http://produits.example.com/objet/+RewriteBase "/produits/" +RewriteRule "^widget/(.*)$" "http://produits.example.com/widget/$1" [P] +ProxyPassReverse "/produits/objet/" "http://produits.example.com/objet/"
Dans le deuxième exemple, nous ne mandatons la requête que si nous @@ -75,10 +73,10 @@ ProxyPassReverse /produits/objet/ http://produits.example.com/objet/ autre, et que vous n'êtes pas certain que tout le contenu a déjà été migré.
-RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule ^/(.*) http://ancien.exemple.com/$1 [P] -ProxyPassReverse / http://ancien.exemple.com/+
RewriteCond "%{REQUEST_FILENAME}" !-f +RewriteCond "%{REQUEST_FILENAME}" !-d +RewriteRule "^/(.*)" "http://ancien.exemple.com/$1" [P] +ProxyPassReverse "/" "http://ancien.exemple.com/"diff --git a/docs/manual/rewrite/proxy.xml.meta b/docs/manual/rewrite/proxy.xml.meta index b3fd4080c15..07ad4e7e07a 100644 --- a/docs/manual/rewrite/proxy.xml.meta +++ b/docs/manual/rewrite/proxy.xml.meta @@ -8,6 +8,6 @@
Ce document est un complément à la Documentation de référence de @@ -83,7 +81,7 @@ copier/coller dans vos fichiers de configuration. la règle suivante :
RewriteEngine on -RewriteRule ^/foo\.html$ /bar.html [PT]+RewriteRule "^/foo\.html$" "/bar.html" [PT] @@ -115,7 +113,7 @@ RewriteRule ^/foo\.html$ /bar.html [PT]
RewriteEngine on -RewriteRule ^foo\.html$ bar.html [R]+RewriteRule "^foo\.html$" "bar.html" [R] @@ -126,7 +124,7 @@ RewriteRule ^foo\.html$ bar.html [ -
Redirect /foo.html /bar.html+
Redirect "/foo.html" "/bar.html"@@ -157,15 +155,15 @@ RewriteRule ^foo\.html$ bar.html [#Avec mod_rewrite RewriteEngine on -RewriteRule ^/docs/(.+) http://nouveau.example.com/docs/$1 [R,L] +RewriteRule "^/docs/(.+)" "http://nouveau.example.com/docs/$1" [R,L]
#Avec RedirectMatch -RedirectMatch ^/docs/(.*) http://nouveau.example.com/docs/$1+RedirectMatch "^/docs/(.*)" "http://nouveau.example.com/docs/$1"
#Avec Redirect -Redirect /docs/ http://nouveau.example.com/docs/+Redirect "/docs/" "http://nouveau.example.com/docs/" @@ -197,8 +195,8 @@ Redirect /docs/ http://nouveau.example.com/docs/
/~quux/foo.cgi
.
RewriteEngine on -RewriteBase /~quux/ -RewriteRule ^foo\.html$ foo.cgi [H=cgi-script]+RewriteBase "/~quux/" +RewriteRule "^foo\.html$" "foo.cgi" [H=cgi-script] @@ -234,13 +232,13 @@ RewriteRule ^foo\.html$ foo.cgi
# jeu de règles assurant une compatibilité ascendante en réécrivant@@ -293,7 +291,7 @@ une section de serveur virtuel pour le/les noms d'h ServerName undesired.example.com ServerAlias example.com notthis.example.com - Redirect / http://www.example.com/ + Redirect "/" "http://www.example.com/" </VirtualHost> <VirtualHost *:80> @@ -304,7 +302,7 @@ une section de serveur virtuel pour le/les noms d'h
# document.html en document.php si et seulement si document.php
# existe -<Directory /var/www/htdocs> +<Directory "/var/www/htdocs"> RewriteEngine on - RewriteBase /var/www/htdocs + RewriteBase "/var/www/htdocs" - RewriteCond $1.php -f - RewriteCond $1.html !-f - RewriteRule ^(.*).html$ $1.php + RewriteCond "$1.php" -f + RewriteCond "$1.html" !-f + RewriteRule "^(.*).html$" "$1.php" </Directory>
Vous pouvez aussi utiliser la directive <If>
:
<If "%{HTTP_HOST} != 'www.example.com'"> - Redirect / http://www.example.com/ + Redirect "/" "http://www.example.com/" </If>@@ -312,7 +310,7 @@ une section de serveur virtuel pour le/les noms d'h :
<If "%{SERVER_PROTOCOL} != 'HTTPS'"> - Redirect /admin/ https://www.example.com/admin/ + Redirect "/admin/" "https://www.example.com/admin/" </If>@@ -322,16 +320,16 @@ d'un jeu plus important de r la recette suivante :
Pour les sites écoutant sur un port autre que 80:
-RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] -RewriteCond %{HTTP_HOST} !^$ -RewriteCond %{SERVER_PORT} !^80$ -RewriteRule ^/?(.*) http://www.example.com:%{SERVER_PORT}/$1 [L,R,NE]+
RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] +RewriteCond "%{HTTP_HOST}" "!^$" +RewriteCond "%{SERVER_PORT}" "!^80$" +RewriteRule "^/?(.*)" "http://www.example.com:%{SERVER_PORT}/$1" [L,R,NE]
Et pour un site écoutant sur le port 80
-RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] -RewriteCond %{HTTP_HOST} !^$ -RewriteRule ^/?(.*) http://www.example.com/$1 [L,R,NE]+
RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] +RewriteCond "%{HTTP_HOST}" "!^$" +RewriteRule "^/?(.*)" "http://www.example.com/$1" [L,R,NE]
Si vous souhaitez que cette règle s'applique à tous les noms de @@ -341,9 +339,9 @@ RewriteRule ^/?(.*) http://www.example.com/$1 [L,R,NE] possibles de example.com, vous pouvez utiliser le jeu de règles suivants :
-RewriteCond %{HTTP_HOST} !^www\. [NC] -RewriteCond %{HTTP_HOST} !^$ -RewriteRule ^/?(.*) http://www.%{HTTP_HOST}/$1 [L,R,NE]+
RewriteCond "%{HTTP_HOST}" "!^www\." [NC] +RewriteCond "%{HTTP_HOST}" "!^$" +RewriteRule "^/?(.*)" "http://www.%{HTTP_HOST}/$1" [L,R,NE]
Vous pouvez utiliser ce jeu de règles aussi bien dans le fichier @@ -382,17 +380,17 @@ RewriteRule ^/?(.*) http://www.%{HTTP_HOST}/$1 [L,R,NE] # on cherche tout d'abord dans dir1/... # ... et si on trouve, on est content et on arrête : -RewriteCond %{DOCUMENT_ROOT}/dir1/%{REQUEST_URI} -f -RewriteRule ^(.+) %{DOCUMENT_ROOT}/dir1/$1 [L] +RewriteCond "%{DOCUMENT_ROOT}/dir1/%{REQUEST_URI}" -f +RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/dir1/$1" [L] # on cherche ensuite dans dir2/... # ... et si on trouve, on est content et on arrête : -RewriteCond %{DOCUMENT_ROOT}/dir2/%{REQUEST_URI} -f -RewriteRule ^(.+) %{DOCUMENT_ROOT}/dir2/$1 [L] +RewriteCond "%{DOCUMENT_ROOT}/dir2/%{REQUEST_URI}" -f +RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/dir2/$1" [L] # sinon, on continue la recherche avec d'autres directives Alias # ou ScriptAlias, etc... -RewriteRule ^ - [PT] +RewriteRule "^" "-" [PT] @@ -424,9 +422,9 @@ RewriteRule ^ - [PT]
HostnameLookups on RewriteEngine on -RewriteMap multiplex txt:/path/to/map.mirrors -RewriteCond %{REMOTE_HOST} ([a-z]+)$ [NC] -RewriteRule ^/(.*)$ ${multiplex:%1|http://www.example.com/}$1 [R,L]+RewriteMap multiplex "txt:/path/to/map.mirrors" +RewriteCond "%{REMOTE_HOST}" "([a-z]+)$ [NC]" +RewriteRule "^/(.*)$" "${multiplex:%1|http://www.example.com/}$1" [R,L]
@@ -479,14 +477,14 @@ com http://www.example.com/
foo.20.html
. Tous les autres navigateurs
reçoivent la page foo.32.html
. Tout ceci est
effectué par le jeu de règles suivant :
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/3.* -RewriteRule ^foo\.html$ foo.NS.html [L] +@@ -518,7 +516,7 @@ RewriteRule ^foo\.html$ foo.32.html [L jeu de règles suivant, nous remplaçonsRewriteCond "%{HTTP_USER_AGENT}" "^Mozilla/3.*" +RewriteRule "^foo\.html$" "foo.NS.html" [L] -RewriteCond %{HTTP_USER_AGENT} ^Lynx/ [OR] -RewriteCond %{HTTP_USER_AGENT} ^Mozilla/[12] -RewriteRule ^foo\.html$ foo.20.html [L] +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]+RewriteRule "^foo\.html$" "foo.32.html" [L]
/matous
et
/minettes
par le canonique /chats
.
- RewriteRule ^/(matous|minettes)/(.*) /chats/$2 [R]+
RewriteRule "^/(matous|minettes)/(.*)" "/chats/$2" [R]@@ -526,7 +524,7 @@ RewriteRule ^foo\.html$ foo.32.html [L
RedirectMatch ^/(matous|minettes)/(.*) /chats/$2+
RedirectMatch "^/(matous|minettes)/(.*)" "/chats/$2"
RewriteEngine on -RewriteRule ^/$ /a-propos-de/ [R]+RewriteRule "^/$" "/a-propos-de/" [R]
Notez que l'on peut aussi y parvenir en utilisant la directive
RedirectMatch
:
RedirectMatch ^/$ -http://example.com/a-propos-de/+
RedirectMatch "^/$" "http://example.com/a-propos-de/"
Notez aussi que cet exemple ne réécrit que l'URL racine. En d'autres @@ -597,8 +594,8 @@ existant effectivement comme une image, ou un fichier css.
Depuis la version 2.2.16, vous pouvez y parvenir via la directive
FallbackResource
:
<Directory /var/www/my_blog> - FallbackResource index.php +<Directory "/var/www/my_blog"> + FallbackResource "index.php" </Directory>@@ -606,12 +603,12 @@ existant effectivement comme une image, ou un fichier css. les versions plus anciennes d'Apache, utiliser un jeu de règles du style : -<Directory /var/www/my_blog> - RewriteBase /my_blog +<Directory "/var/www/my_blog"> + RewriteBase "/my_blog" - RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-f - RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-d - RewriteRule ^ index.php [PT] + RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-f + RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d + RewriteRule "^" "index.php" [PT] </Directory>@@ -619,7 +616,7 @@ les versions plus anciennes d'Apache, utiliser un jeu de r que chaîne de paramètres à index.php, vous pouvez remplacer cette règle de réécriture par : -RewriteRule (.*) index.php?$1 [PT,QSA]+RewriteRule "(.*)" "index.php?$1" [PT,QSA]Notez que l'on peut utiliser ces jeux de règles aussi bien dans un @@ -652,8 +649,8 @@ doubles perluettes '&&' dans les substitutions.
# Remove mykey=??? -RewriteCond %{QUERY_STRING} (.*(?:^|&))mykey=([^&]*)&?(.*)&?$ -RewriteRule (.*) $1?%1%3+RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" +RewriteRule "(.*)" "$1?%1%3"
# Copy from query string to PATH_INFO -RewriteCond %{QUERY_STRING} (.*(?:^|&))mykey=([^&]*)&?(.*)&?$ -RewriteRule (.*) $1/products/%2/? [PT]+RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" +RewriteRule "(.*)" "$1/products/%2/?" [PT] @@ -670,9 +667,9 @@ RewriteRule (.*) $1/products/%2/? [PT] condition ::
# Capture the value of mykey in the query string -RewriteCond %{QUERY_STRING} (.*(?:^|&))mykey=([^&]*)&?(.*)&?$ -RewriteCond %2 !=not-so-secret-value -RewriteRule (.*) - [F]+RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$"" +RewriteCond "%2" !=not-so-secret-value +RewriteRule "(.*)" - [F] @@ -681,7 +678,7 @@ RewriteRule (.*) - [F] vers sa chaîne de paramètres :
# The desired URL might be /products/kitchen-sink, and the script expects # /path?products=kitchen-sink. -RewriteRule ^/?path/([^/]+)/([^/]+) /path?$1=$2 [PT]+RewriteRule "^/?path/([^/]+)/([^/]+)" "/path?$1=$2" [PT] diff --git a/docs/manual/rewrite/remapping.xml.meta b/docs/manual/rewrite/remapping.xml.meta index 5e5f6e1602e..fc4dfefebf2 100644 --- a/docs/manual/rewrite/remapping.xml.meta +++ b/docs/manual/rewrite/remapping.xml.meta @@ -8,6 +8,6 @@
Ce document est un complément à la documentation de référence du @@ -102,17 +100,17 @@
Par exemple, vous pouvez définir une directive
RewriteMap
comme suit :
RewriteMap examplemap txt:/path/to/file/map.txt+
RewriteMap examplemap "txt:/path/to/file/map.txt"
Vous pourrez par la suite utiliser cette table de correspondances
dans une directive RewriteRule
comme suit :
RewriteRule ^/ex/(.*) ${examplemap:$1}+
RewriteRule "^/ex/(.*)" "${examplemap:$1}"
Il est possible de spécifier une valeur par défaut qui sera utilisée si la recherche dans la table de correspondances est infructueuse :
-RewriteRule ^/ex/(.*) ${examplemap:$1|/not_found.html}+
RewriteRule "^/ex/(.*)" "${examplemap:$1|/not_found.html}"
Product to ID configuration
-RewriteMap product2id txt:/etc/apache2/productmap.txt -RewriteRule ^/product/(.*) /prods.php?id=${product2id:$1|NOTFOUND} [PT]+
RewriteMap product2id "txt:/etc/apache2/productmap.txt" +RewriteRule "^/product/(.*)" "/prods.php?id=${product2id:$1|NOTFOUND}" [PT]
Nous supposons ici que le script prods.php
sait quoi
@@ -196,7 +194,7 @@ TELEPHONE 328
dans un fichier .htaccess
, vous devrez supprimer le
slash de début dans le modèle de réécriture afin que ce dernier
puisse correspondre à toute URL :
-
RewriteRule ^product/(.*) /prods.php?id=${product2id:$1|NOTFOUND} [PT]+
RewriteRule "^product/(.*)" "/prods.php?id=${product2id:$1|NOTFOUND}" [PT]
Directives de configuration
-RewriteMap servers rnd:/path/to/file/map.txt +@@ -277,7 +275,7 @@ statique www1|www1|www2|www3|www4RewriteMap servers "rnd:/path/to/file/map.txt" -RewriteRule ^/(.*\.(png|gif|jpg)) http://${servers:static}/$1 [NC,P,L] -RewriteRule ^/(.*) http://${servers:dynamic}/$1 [P,L]+RewriteRule "^/(.*\.(png|gif|jpg))" "http://${servers:static}/$1" [NC,P,L] +RewriteRule "^/(.*)" "http://${servers:dynamic}/$1" [P,L]
Vous pouvez éventuellement spécifier un type dbm particulier :
-RewriteMap examplemap dbm=sdbm:/etc/apache/mapfile.dbm+
RewriteMap examplemap "dbm=sdbm:/etc/apache/mapfile.dbm"
Ce type peut être choisi parmi sdbm, gdbm, ndbm ou db. Il est @@ -295,7 +293,7 @@ $ httxt2dbm -i fichier-map.txt -o fichier-map.map
Vous pouvez alors faire référence au fichier obtenu dans votre
directive RewriteMap
:
RewriteMap mapname dbm:/etc/apache/mapfile.map+
RewriteMap mapname "dbm:/etc/apache/mapfile.map"
RewriteMap
.
Redirige un URI vers son équivalent en minuscules
RewriteMap lc int:tolower -RewriteRule (.*?[A-Z]+.*) ${lc:$1} [R]+RewriteRule "(.*?[A-Z]+.*)" "${lc:$1}" [R]
Configuration de la réécriture
-RewriteMap d2u prg:/www/bin/dash2under.pl+
-RewriteRule - ${d2u:%{REQUEST_URI}}
RewriteMap d2u "prg:/www/bin/dash2under.pl"
+RewriteRule "-" "${d2u:%{REQUEST_URI}}"
dash2under.pl
diff --git a/docs/manual/rewrite/rewritemap.xml.meta b/docs/manual/rewrite/rewritemap.xml.meta index e385817f7b4..b77e9e61685 100644 --- a/docs/manual/rewrite/rewritemap.xml.meta +++ b/docs/manual/rewrite/rewritemap.xml.meta @@ -8,6 +8,6 @@Ce document est un complément à la documentation de référence du module @@ -78,8 +76,8 @@ correspondance