# Exemples de règles Rewrite

<div class="mw-body-content" id="bkmrk-sommaire"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output"><div class="toc"></div></div></div></div></div>Charger le module Rewrite dans httpd.conf :

<div class="mw-body-content" id="bkmrk-%C2%A0%5Bmasquer%5D%C2%A0-1%C2%A0rediri"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output"><div class="toc" id="bkmrk-%C2%A0%5Bmasquer%5D%C2%A0-1%C2%A0rediri-0"></div></div></div></div></div>```
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
```

# <span class="mw-headline" id="bkmrk-rediriger-le-traffic-0">Rediriger le traffic HTTP vers HTTPS</span>

A l'intérieur du bloc &lt;VirtualHost xx.xx.xx.xx:80&gt; ajouter :

```
 RewriteCond %{SERVER_PORT}                !^443$
 RewriteRule ^/(.*)                      https://<'''URL du site HTTPS'''>/$1 [L,R]
 RewriteOptions inherit
```

Signifie :

<div class="mw-body-content" id="bkmrk-condition-%3D-tout-ce-"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">- Condition = tout ce qui n'est pas à destination du port 443
- Règle = est redirigé vers https://&lt;'''URL du site HTTPS'''&gt;, et ce qui suit le "/" (^/(.\*)) après le nom de virtualhost est copié tel quel dans la redirection ($1)

</div></div></div></div># <span class="mw-headline" id="bkmrk-r%C3%A9%C3%A9crire-le-nom-des--0">Réécrire le nom des pages</span>

```
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&amp;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&amp;id=1 sur le serveur

Le format des expressions ("\[a-z\]", "\[0-9\]"...) correspond aux expressions régulières (ou "regex").

# <span class="mw-headline" id="bkmrk-flags-0">Flags</span>

Quelques notes sur les flags :

<div class="mw-body-content" id="bkmrk-%5Bnc%5D-indique-%22no-cas"><div class="mw-body-content"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">- \[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 :

</div></div></div></div></div>```
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.

<div class="mw-body-content" id="bkmrk-%5Br%5D-ou-%5Br%3Dcode%5D-sign"><div class="mw-content-ltr" dir="ltr" id="bkmrk-%5Br%5D-ou-%5Br%3Dcode%5D-sign-0" lang="fr"><div class="mw-parser-output">- \[R\] ou \[R=code\] signifie "Redirect", redirection **externe**. Sans ce flag, mod\_rewrite **supprime** le "http://&lt;nom du vhost&gt;" 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\].

</div></div></div>