Url rewriting avec htaccess

By 5 mars 2007Tutoriels, Web dynamique

L’url rewriting consiste à réécrire les urls de manière lisible et généralement mieux supportée par les moteurs de recherche.
La méthode présentée ici repose sur l’écriture d’un fichier .htaccess placé à la racine de votre site.

Un fichier .htaccess est un fichier texte qui contient des directives destinées au serveur Apache. Parmi les nombreuses fonctionnalités de ce fichier, il y en a au moins 2 qui sont très souvent utilisées :

  1. la protection de répertoires
  2. la réécriture d’urls

Très souvent, les sites dynamiques basés sur php par exemple, vont générer des urls du style

http://www.mondomaine.com/catalogue.php?id_collection=1&id-theme=1

Ce qui serait intéressant dans le cas ci-dessus serait d’avoir une url plus lisible du style

http://www.mondomaine.com/catalogue_1_1.html

le fichier .htaccess

On va d’abord voir un cas très simple, ceci vous permettra de tester si ça marche.

RewriteEngine on
RewriteRule ^index.html$  test.php

Le code ci-dessus réécrit la page test.php en tant que index.html, ce qui fait que maintenant, si vous tapez index.html dans la zone d’url de votre navigateur, celui-ci devrait afficher la page test.php

La ligne qui réécrit l’url ici est basée sur RewriteRule : Règle de réécriture.

A gauche de ce mot-clé, c’est le résultat escompté, à droite c’est l’url actuelle de votre page.
Les règles de réécriture utilisent les expressions régulières.
L’expression régulière doit être encadrée par les 2 délimiteurs ^ et

Voici un exemple avec des urls de site dynamique en php :

RewriteEngine on
# un commentaire
RewriteRule ^catalogue_([0-9]+)_([0-9]+).html$
catalogue.php?id_collection=$1&id_theme=$2

Les chiffres entre crochets avec le signe + après, signifient un nombre quelconque de chiffres
La première expression entre parenthèses est évaluée et on la récupère dans $1.
La deuxième dans $2 etc…

Dans notre cas, il y a 2 paramètres dans l’url, donc on n’a besoin que de 2 variables.

En cas de problème

Si ça ne marche pas, c’est peut-être lié à votre configuration Apache. Vérifiez d’abord que la directive AllowOverride est bien à All et pas à None dans le fichier httpd.conf de votre serveur.

Pour ceux qui ont le courage, voici l’adresse de la doc en ligne

Jacques VANNET

2 commentaires

Laisser un commentaire