Les tutoriaux
L'url rewriting
Vous pouvez, à titre de préambule, consulter l'article sur l'url rewriting.
Le module Url rewriting est fourni par Apache, il est donc necessaire de l'avoir installé sur son serveur.
Pour pouvoir l'utiliser, vous devez l'activer dans le fichier de configuration httpd.conf.
Dans ce fichier, il y a deux lignes à décommenter, pour cela il suffit d'enlever le # en début
de ligne.
Voici les lignes à trouver :
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c
Verifiez pour la première ligne, que le chemin fourni vers le fichier mod_rewrite.so est bien le dossier qui contient les
extensions apache.
Une fois le fichier de configuration édité, vous pouvez tester puis redémarer le serveur, à partir
des commandes apachectl -configtest et apachectl -restart sous linux, et à partir des racourcis
Apache du menu démarer sous windows.
Nous pouvons maintenant effectuer un premier test. Créez un fichier rewrite.php disponible à
partir d'apache, puis dans le même dossier, un fichier .htaccess contenant ces lignes :
RewriteEngine on RewriteRule ^(test|essai)\.html$ /rewrite.php
Dans votre navigateur, accedez maintenant successivement aux fichiers rewrite.php, test.html puis
essai.html. Si le module Url Rewriting est bien opérationnel, vous devriez voir à chaque fois le
même fichier, et surtout pas d'erreur 404 (fichier introuvable) ou 500 (Erreur serveur).
Nous allons commencer par expliquer le code du fichier .htaccess du dessus.
RewriteEngine on RewriteRule ^(test|essai)\.html$ /rewrite.php
La commande RewriteEngine on demande simplement à apache d'activer son module Url Rewriting.
RewriteRule indique que nous allons créer une regle d'analyse d'url. La partie avant l'éspace
indique le format de l'url entrée, l'autre indique l'adresse du fichier réélement sur le serveur.
Les regles s'ecrivent avec la syntaxe des expressions régulières (ou regex), nous allons étudier sommairement quelques bases.
Les symboles courants :
^ : indique que nous sommes en début de ligne, ou au début de la chaîne de
caractères. Cependant, entre crochets, la signification est différente.$ : indique lui que nous sommes en fin de ligne, ou de chaîne.. : remplace tout caractère inconnu\ : échape un caractère utilisé dans la syntaxe regex. Par exemple, pour utiliser
un point, la syntaxe est \.
Nous voulons rediriger le visiteur qui tape php3.html, php4.html et php5.html vers une
page unique page.php?sujet=php.
Nous pourions utiliser cette syntaxe :
RewriteEngine on RewriteRule ^php3\.html$ /page.php?sujet=php RewriteRule ^php4\.html$ /page.php?sujet=php RewriteRule ^php5\.html$ /page.php?sujet=phpMais elle n'est pas très pratique dès que nous souhaitons compliquer un peu plus l'affaire.
.
RewriteEngine on RewriteRule php.\.html$ /page.php?sujet=php
Cette syntaxe est tout à fait correcte, le visiteur pourrais taper php[nimportequel caractère].html, il serai
revoyé vers la page souhaitée. Nous souhaitons maintenant filtrer, pour arriver à notre but initial,
utiliser les adresses php3.html, php4.html ou php5.html.
Il faut pour cela utiliser d'autres caractères clés :
[] : un ensemble de crochet correspond à un ou plusieurs caractères, qui pouraient être l'un
de ceux entre ces crochets.
Pour notre exemple :
RewriteRule ^php[345]\.html$ \page.php?sujet=php
Second exemple, nous souhaitons que la page [quelquechose].html mène vers
page.php?sujet=[ce quelquechose].
Nous ne savons pas ce que pourrais être le "quelquechose" en question, il faut donc utiliser la syntaxe :
( ) : la chaîne de caractères comprise entre les deux parenthèses peut être
réutilisée dans la seconde occurence avec les variables $n ou //n, où
n est le numero de la parenthèse
RewriteRule ^(.+)\.html$ \page.php?sujet=$1
Un nouveau signe est ici apparu, +. Il fait partie d'un ensemble, qui détermine le nombre de
caractères que remplacent les parenthèses ou crochets qui le précede.
Les symboles sont :
? : correspond à 0 ou 1 caractère.* : 0 caractères ou plus+ : 1 caractère ou plus{n} : n caractères{n,} : n caractères ou plus{n,m} : entre n et m caractères(.+) correspond à un caractère (n'importe lequel/lesquels) ou plusieurs.
Il reste un dernier symbole important. Le symbole |, qui correspond à l'opérateur logique "ou".
Par exemple, ou souhaite que les pages [html OU php].html affichent page.php?sujet=[html OU php].
On utilise alors la règle :
Rewrite Rule ^(html|php)\.html$ /page.php?sujet=$1
Vous pouvez consulter une page "mémo" disponible sur le site expreg.com.
La réécriture conditionnelle est souvent utilisée par exemple pour bannir une IP, ou protèger vos images pour qu'il soit impossible de les afficher à partir d'un autre site que le votre.
La commande est RewriteCond, par exemple :
#Rediriger une adresse ip RewriteCond %(REMOTE_ADDR) ^127.0.0.1$ RewriteRule .* /interdit.html
L'adresse ip 127.0.0.1 sera, quelque soit l'adresse tapée (.*) redirigé vers
inderdit.php.
#rediriger les utilisateurs d'internet explorer vers le site de mozilla : RewriteCond %(HTTP_USER_AGENT) MSIE RewriteRule .* http://www.mozilla.org
#Interdire l'affichage des images si ce n'est pas sur mon site : RewriteCond %(HTTP_HOST) [^(http://www.martiusweb.net)] RewriteRule (.+)\.(jpg|gif|png)^ /interdit.$1 #Il faut créer les images interdit.jpg, inderdit.gif et inderdit.png
Les masques à connaître sont :
%(HTTP_USER_AGENT) : Contient notemment le naviguateur et le système d' exploitation%(HTTP_REFERER) : La page (si elle est renseignée) d' ou vient votre visiteur
%(HTTP_HOST) : Le domaine
%(REQUEST_FILENAME) : La page qui a été demandée
%(REMOTE_ADDR) : L' adresse IP
A vous maintenant d'experimenter vos expressions régulières.
Tutorial librement inspiré du totorial Url Rewriting de expreg.com
N'hésitez pas à poser vos questions sur le forum