Outils personnels

Règles Rewrite : Différence entre versions

De wikiGite

(Réécrire le nom des pages)
Ligne 19 : Ligne 19 :
 
= Réécrire le nom des pages =
 
= Réécrire le nom des pages =
 
  RewriteRule ^test\.html$ /test.php [L]
 
  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$)).
+
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.
  
 
= Flags =
 
= Flags =

Version du 14 octobre 2011 à 12:15

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.

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].