web 2.0

Seebz.net

L'URL Rewriting

Les serveurs Apache permettent (si l'option est activée) de réécrire les URL.
Cela peut être utile avec un site dynamique pour avoir des URL 'propres', sans ? ni &.
Nous allons faire une première approche de cette méthode.

Mais est-ce vraiment utile ?En plus d'avoir une URL plus 'belle', cette méthode a l'avantage de permettre une meilleure indexation par les moteurs de recherche.
Google par exemple n'indexe en général que les pages ayant au maximum 2 paramètres dans l'URL.

Test du serveur

Tout d'abord, nous devons nous assurer que notre hébergeur accepte la réécriture d'URL.
Pour cela, nous allons créer un répertoire 'test' à la racine de notre site. (http://www.votre-site.com/test/)
Dans ce répertoire, nous ajoutons un fichier 'test.html' qui contiendra ces quelques lignes:
<html>
  <head>
    <title>Test</title>
  </head>
  <body>
    URL Rewriting fonctionne !
  </body>
</html>
Dans ce même répertoire, nous allons créer le fichier de configuration Apache nommé .htaccessRewriteEngine on
RewriteRule ^rewriting.html$ test.html [L]
Si vous éprouvez des difficultés à nommer le fichier ainsi avec Windows, appelez le txt.htaccess et renommez le une fois sur le serveur.Ceci fait, rendez-vous à l'adresse suivante: http://www.votre-site.com/test/rewriting.html

Si vous lisez le texte "URL Rewriting fonctionne !", c'est que le serveur accepte l'URL Rewriting.
Dans le cas contraire, le serveur retourne une erreur (code 500 en général). Il vous faudra alors activer le module de réécriture d'URL.

Activation du module (si le test a échoué)

Passez cette étape si le test a réussi.
Vous devez avoir accès au fichier de configuration Apache pour activer la réécriture.
Pour activer le module de redirection d'URL, éditez le fichier nommé httpd.conf.
Cherchez-y la ligne suivante :
#LoadModule rewrite_module modules/mod_rewrite.soet décommentez-la en enlevant le '#'.

Faites la même chose avec la ligne suivante (si elle existe):
#AddModule mod_rewrite.cLes modifications seront actives après le redémarrage du serveur, vous pourrez alors refaire le test.

Explications

Nous allons essayer de comprendre ce qui s'est passé.RewriteEngine onCette ligne est à indiquer une seule fois par fichier .htaccess, avant la règle de réécriture.
Elle indiquent au serveur d'activer le module de réécriture.RewriteRule ^rewriting.html$ test.html [L]Ceci est réellement la règle de réécriture, elle signifie que toute demande du fichier /test/rewriting.html concerne en fait le fichier /test/test.html
La partie '[L]' optionnelle indique au serveur de ne pas tester les autres règles de réécriture si celle-ci fonctionne.Respectez la syntaxe, le 'faux' lien commence par un ^, se termine par un $ et le point (.) est précédé d'un backslashe ().

Les expressions régulières

Nous avons vu une règle de réécriture 'simple', mais qu'en est-il des règles plus compliquées ?Par exemple, nous avons actuellement un fichier PHP avec passage de paramètres :
  http://www.votre-site.com/article.php?id=25&page=2&lang=fr
et nous souhaitons réécrire l'URL comme ci :
  http://www.votre-site.com/article-25-2-fr.html

Des expressions régulières (regex) sont mis à notre dispositions.
Je ne vais pas détailler ici toutes les regex existantes (feront l'objet d'un article futur) mais seulement donner quelques exemples.La règle de réécriture sera la suivante :
RewriteRule ^article-([0-9]*)-([0-9]*)-([a-z]*).html$ /article.php?id=$1&page=$2&lang=$3 [L]
Les $x correspondent aux regex dans l'ordre qu'ils ont été déclarés.

([0-9]*) signifie une série de caractères numériques et le * signale qu'il peut y en a plusieurs (exemples: 1 , 25 , 1235, ...).
Si on aurait mit ([0-9]), il n'y aurait pu y avoir 1 seul chiffre (exemples: 1 , 5 , ...).

([a-z]*) signifie une série de caractères en minuscule, si on voulait aussi les majuscules, la regex aurait été la suivante : ([a-zA-Z]*).

Voilà, sachez qu'il existe d'autres regex mais ceci devrait suffir pour commencer.

Liens utiles

Voici quelques liens qui vous aideront à réécrire vos URL :

  - URL Rewriting expliqué aux débutants   (Web Rank Info)
  - Configurer Apache   (Vulgarisation-informatique)
  - L'URL rewriting   (Vulgarisation-informatique)
  - Les Expressions régulières   (Expreg.com)
  - Mod_rewrite, ou la réécriture d'url à la volée   (Webmaster-Hub)
  - L'URL Rewriting   (Le Site du Zéro)


Vous savez maintenant comment faire de belles URL.
N'oubliez pas de changer vos liens et de faire attention aux caractères spéciaux qui sont interdits dans les URL.

Partager : Share
 

7 Réponses à “L'URL Rewriting”

  1. Voici la méthode pour activer le Rewriting sur un serveur Linux avec Apache2.

    1) Activer le Rewriting:
    # a2enmod rewrite

    2) Éditer le fichier /etc/apache2/sites-enabled/000-default
    (il faut remplacer AllowOverride none par AllowOverride All à deux reprise)

    3) Relancer Apache
    # /etc/init.d/apache2 reload

  2. Salut juste une question pour tester tu dis de mettre le code html dans la page test.html dans un répértoire test et ensuite pour tester c'est via l'url http://www.monsite.be/test/rewriting.html c'est pas plutôt http://www.monsite.be/test/test.html ?? j'ai essayer les 2 url toujours messages d'erreur et je le trouve ou ce fichier httpd.conf. pour info mon hebergeur c'est online
    merci pour ta reponse

  3. Salut leo,

    Pour le test, c'est bien http://www.monsite.be/rewriting.html qu'il faut entrer dans la barre d'adresse (la règle de rewriting ira chercher la page test.html 'en interne').

    Par contre, je viens de remarquer qu'une erreur s'était glisser dans l'article : le fichier .htaccess doit contenir RewriteRule ^rewriting\.html$ test.html [L]
    et pas RewriteRule ^rewriting\.html$ /test/test.html [L]
    comme je l'avais écrit. (Mille excuses)

    Pour le fichier httpd.conf, tu n'y a pas accès si tu es chez un hébergeur, il faut leur demander d'activer le rewriting si toutefois c'est compris dans leur offre.

    N'hésite pas à poser d'autres questions si tu as encore des doutes.

    Cordialement, seebz

  4. Ton tutoriel ressemble beaucoup au mien ^^

    <a href="http://www.apprendre-php.com/tutoriels/tutoriel-23-url-rewriting-ou-reecriture-d-url-avec-apache.html">URL Rewriting ou réécriture d'url avec Apache sur apprendre-php.com</a>

    Mais tu nous a fait un bon tuto ;)

  5. Il y a aussi ce site qui donne des astuces sympa de rewriting : <a href="http://www.urlrewriting.fr/" target="_blank">www.urlrewriting.fr</a>

  6. Salut,

    Pour ma part mon site est sur Free, et je ne vois nul part ou activer ce module :s , pouvez vous m'aider s'il vous plaît ?

    Merci d'avance !

  7. pourquoi pas:)

Poster un commentaire

Remonter