Ecrit par
Northern. Posté le Mercredi 17 octobre 2007 @ 10:46:18.
Faire connaître cet article :
Logiciel utilisé : Apache
Niveau: Confirmé
Le PHP c'est bien, mais les URL du genre "edito.htmlsessionid=567838DCA8488?page=article?id=45" sont trés mauvaises pour le référencement et pour faire des liens dont les gens se rappèleront. Une manière répandue de régler le problème est d'écrire des règles de réécriture d'URL dans les fichiers de configuration d'Apache (c'est celle que j'utilise sur e-facile.fr). Quand Apache reçoit une requête il applique à l'URL demandé les règles y correspondant et renvoit la page correspondant à l'URL produite.
Pré-requis
Attention : il faut que le serveur Apache ait le mod "mod_rewrite". Si il n'est pas intégré à votre Apache et que vous avez possiblité de l'ajouter faites-le, si vous n'avez pas la possiblité c'est foutu. Donc choisissez bien votre hébergeur (par exemple chez OVH il y a pas de problème de ce côté). De même, il faut soit que vous ayiez accés soit au fichier de configuration d'Apache, soit la possiblité de créer des .htaccess (ici encore, pas de problème avec OVH).
Activation
Pour activer le mod, ajoutez "RewriteEngine on" à votre fichier de configuration (httpd.conf ou .htaccess à la racine de votre site).
RewriteEngine on
Syntaxe des règles
La syntaxe des règles est la suivante :
RewriteRule source destination [options]
"source" est une expression régulière décrivant le type d'URL sur laquelle cette règle s'appliquera, et "destination" le résultat que la règle devra produire.
Exemples
Une règle pour les forums de e-facile.fr :
RewriteRule ^forum-([0-9]+)-([0-9]+).html viewtopic.php?forum=&topic= [L]
Ici, on traduit les URL du type "forum-nombre1-nombre2.html" en "viewtopic.php?forum=nombre1&topic=nombre2". L'option "L", comme "last", interdit que d'autres règles soit appliquées à cette URL.
Vous pouvez tester : visitez
forum-7-19.html et
viewtopic.php?forum=7&topic=19 et constatez que ce sont une seule et unique page.
Les règles pour le mode mise à jour de e-facile.fr :
Quand je fais une mise à jour du site je redirige toutes les requêtes vers maj.php.
#RewriteCond %{REQUEST_URI} !/maj.php$
#RewriteCond %{REQUEST_URI} !/images/maj.gif$
#RewriteRule ^(.*)$ /maj.php [L]
Quand je fais une mise à jour je décommente ces 3 règles. "RewriteCond" permet de spécifier des conditions qui doivent être remplies pour que la règle suivante soit appliquée.
La règle elle-même consiste à tout rediriger vers "maj.php", qui est la page indiquant qu'une mise à jour est en cours. Si le serveur cherchait à rediriger aussi maj.php il la redirigerait sur elle-même, et bam : "500 Internal server configuration error". Donc on exclue maj.php de la règle, et également maj.gif qui est une image affichée dans maj.php. Les règles signifient littéralement :
- Si l'URL demandée n'est pas "/maj.php"
- Si l'URL demandée n'est pas "/maj.gif"
- Rediriger tout vers maj.php et ne pas appliquer d'autres règles
Pour plus de détails