Règles Rewrite : Différence entre versions
De wikiGite
m (a déplacé Règle rewrite pour rediriger le port 80 HTTP vers 443 HTTPS vers Règles Rewrite) |
(→Réécrire le nom des pages) |
||
(8 révisions intermédiaires par un autre utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | __TOC__ | ||
+ | Charger le module Rewrite dans httpd.conf : | ||
+ | LoadModule rewrite_module modules/mod_rewrite.so | ||
+ | AddModule mod_rewrite.c | ||
+ | |||
+ | Dans chaque VirtualHost qui doit avoir des règles de réécriture, activer le rewriting par | ||
+ | RewriteEngine on | ||
+ | |||
+ | = Rediriger le traffic HTTP vers HTTPS = | ||
A l'intérieur du bloc <VirtualHost xx.xx.xx.xx:80> ajouter : | A l'intérieur du bloc <VirtualHost xx.xx.xx.xx:80> ajouter : | ||
− | |||
RewriteCond %{SERVER_PORT} !^443$ | RewriteCond %{SERVER_PORT} !^443$ | ||
RewriteRule ^/(.*) <nowiki>https://<'''URL du site HTTPS'''>/$1 [L,R]</nowiki> | RewriteRule ^/(.*) <nowiki>https://<'''URL du site HTTPS'''>/$1 [L,R]</nowiki> | ||
Ligne 9 : | Ligne 17 : | ||
* Règle = est redirigé vers <nowiki>https://<'''URL du site HTTPS'''></nowiki>, et ce qui suit le "/" (^/(.*)) après le nom de virtualhost est copié tel quel dans la redirection ($1) | * Règle = est redirigé vers <nowiki>https://<'''URL du site HTTPS'''></nowiki>, et ce qui suit le "/" (^/(.*)) après le nom de virtualhost est copié tel quel dans la redirection ($1) | ||
− | === | + | = Réécrire le nom des pages = |
+ | RewriteRule ^test\.html$ /test.php [L] | ||
+ | Transforme par exemple le nom test.html (le nom commence par test ("^test"), puis un point (échappé grâce à l'anti-slash pour qu'il soit interprété comme le caractère "." et pas autre chose), et finit par html (html$)) en /test.php. | ||
+ | |||
+ | RewriteRule ([a-z]+)/([a-z]+)\.php$ /frames.php?page=$1&view=$2 | ||
+ | <nowiki>http://votresite.com/index/source.php</nowiki> tapé dans le navigateur deviendra <nowiki>http://votresite.com/frames.php?page=index&view=source</nowiki> sur le serveur | ||
+ | RewriteRule ([0-9]+)/([0-9]+)$ /photo.php?album=$1&id=$2 | ||
+ | <nowiki>http://votresite.com/photo/12/1</nowiki> dans le navigateur deviendra <nowiki>http://votresite.com/photo.php?album=12&id=1</nowiki> sur le serveur | ||
+ | |||
+ | Le format des expressions ("[a-z]", "[0-9]"...) correspond aux expressions régulières (ou "regex"). | ||
+ | |||
+ | = Flags = | ||
Quelques notes sur les flags : | Quelques notes sur les flags : | ||
* [NC] indique "No Case" dans les condition : majuscules/minusciles non prises en compte | * [NC] indique "No Case" dans les condition : majuscules/minusciles non prises en compte |
Version actuelle datée du 14 octobre 2011 à 12:26
Charger le module Rewrite dans httpd.conf :
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c
Dans chaque VirtualHost qui doit avoir des règles de réécriture, activer le rewriting par
RewriteEngine on
Rediriger le traffic HTTP vers HTTPS
A l'intérieur du bloc <VirtualHost xx.xx.xx.xx:80> ajouter :
RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://<'''URL du site HTTPS'''>/$1 [L,R] RewriteOptions inherit
Signifie :
- Condition = tout ce qui n'est pas à destination du port 443
- Règle = est redirigé vers https://<'''URL du site HTTPS'''>, et ce qui suit le "/" (^/(.*)) après le nom de virtualhost est copié tel quel dans la redirection ($1)
Réécrire le nom des pages
RewriteRule ^test\.html$ /test.php [L]
Transforme par exemple le nom test.html (le nom commence par test ("^test"), puis un point (échappé grâce à l'anti-slash pour qu'il soit interprété comme le caractère "." et pas autre chose), et finit par html (html$)) en /test.php.
RewriteRule ([a-z]+)/([a-z]+)\.php$ /frames.php?page=$1&view=$2
http://votresite.com/index/source.php tapé dans le navigateur deviendra http://votresite.com/frames.php?page=index&view=source sur le serveur
RewriteRule ([0-9]+)/([0-9]+)$ /photo.php?album=$1&id=$2
http://votresite.com/photo/12/1 dans le navigateur deviendra http://votresite.com/photo.php?album=12&id=1 sur le serveur
Le format des expressions ("[a-z]", "[0-9]"...) correspond aux expressions régulières (ou "regex").
Flags
Quelques notes sur les flags :
- [NC] indique "No Case" dans les condition : majuscules/minusciles non prises en compte
- [L] signifie "Last rule" : la réécriture s'arrête là, pour éviter qu'une autre règle qui suit n'altère celle-ci. Exemple :
RewriteCond %{HTTP_USER_AGENT} ^Mozilla RewriteRule ^/$ /homepage.max.html [L] RewriteCond %{HTTP_USER_AGENT} ^IE RewriteRule ^/$ /homepage.min.html [L] RewriteRule ^/$ /homepage.std.html [L]
si le navigateur est Mozilla, affiche /homepage.max.html, et ne va pas plus loin. Si c'est IE, affiche /homepage.min.html et ne va pas plus loin (donc : n'affiche pas /homepage.std.html qui suit !). Si ce n'est aucun des 2, affiche /homepage.std.html.
- [R] ou [R=code] signifie "Redirect", redirection externe. Sans ce flag, mod_rewrite supprime le "http://<nom du vhost>" dans la redirection et ne garde que la fin. Pour rediriger vers un site externe, ou un autre site interne (autre virtualhost) ou de http à https, ajouter [R] pour qu'il laisse l'URL complète. Le code par défaut retourné au navigateur est 302 (Moved temporarily), on peut forcer un autre code avec [R=code].