picture picture
avril 28, 2011 (X)HTML, PHP 17 Commentaires

Réécriture d’URL, ou URL Rewriting : petit tutoriel

Réécriture d'URLL’URL Rewriting consiste en gros à modifier la structure des liens afin d’insérer des mots clés dans celui-ci. Ces mots clés sont généralement ceux qui sont présent dans le titre des pages. L’URL rewriting joue également un rôle non négligeable dans le référencement d’un site car les mots clés insérés dans les liens (donc dans leurs adresses) permettent une meilleure indexation de la page concerné.

Retrouvez ici un mode d’emploi simple de cette technique, en 4 temps (comme la valse :biggrin: )…

1er temps : vérifier son hébergeur

Pour que cela fonctionne, il faut

  1. que votre hébergeur accepte le langage PHP,
  2. qu’il accepte la présence de fichier .htaccess sur votre FTP,
  3. et enfin que le mod_rewrite soit activé sur votre serveur Apache.

Beaucoup d’hébergeurs gratuits ou « low-coast » n’acceptent pas cette option. Ce n’est pas pour faire de la publicité…  mais vous pouvez contacter Web Tolosa si vous souhaitez héberger votre site sur un serveur professionnel,  acceptant sans problème l’URL Rewritingt à des tarifs tout a fait concurrentiels :angel:

Pour tester si vous pouvez l’utiliser :

1.   à la racine de votre serveur, déposez une page « test.php » avec simplement le texte suivant :

<?php echo "coucou c'est ok"; ?>

2.   Créez un fichier texte nommé .htaccess (sans préfixe avant le point) sur lequel vous aurez écrit le code suivant :

RewriteEngine on
RewriteRule ^test\.html$ /test.php [L]

3.   Déposez le fichier « .htaccess » et votre page « test.php » via votre FTP à la racine de votre site.

4.   Entrez l’URL suivante dans votre navigateur : http://votresite.com/test.html

A ce niveau, deux hypothèses :
– soit la page apparaît (« coucou c’est ok ») et l’ URL test.html est bien réécrite en test.php dans la barre d’adresse du navigateur,
– soit vous avez une erreur 404, ou plus probable une erreur 500 et là… le problème vient de votre hébergeur.

2eme temps : créer la fonction de formatage des chaînes pour les URL

Tous les liens du site vont devoir être réécrits de manière lisible (par les navigateurs, les moteurs de recherche et par les internautes)

Par exemple, si l’article référence 45 est une Chaise en teck huilé qui appartenant à la catégorie N° 52 des Meubles de jardin, son URL  initiale…

/produit.php?id=45&cat=52

…sera réécrite dynamiquement ainsi :

/meubles-de-jardin/chaise-en-teck-huile_45-52.html

(la référence et le N° de la catégorie doivent apparaître dans l’URL réécrite pour pouvoir recomposer l’URL réelle, mais on y a ajouté des chaines de caractères avec les mot-clés de l’article)

Le but de cette fonction « format_url() » est donc, dans les chaines de caractères composant les catégories, noms des articles, etc.,  de :

  1. convertir les majuscules en minuscules,
  2. convertir les lettres avec accent en lettre sans accent,
  3. convertir tout ce qui n’est pas un chiffre ou une lettre en un tiret,
  4. remplacer les tirets multiples par un tiret unique,
  5. supprimer le dernier caractère si c’est un tiret,
  6. supprimer les espaces ou d’autres caractères de fin de chaîne.

Il vous suffira de décompresser et déposer sur votre serveur le fichier url.inc.php que vous pouvez télécharger en cliquant ici.

Pour appeler cette fonction sur toutes les pages de votre site comportant des liens dont les URL sont à réécrire, insérez simplement en haut de celles-ci (en respectant le chemin relatif entre la page et le fichier à inclure) :

include("url.inc.php");

3eme temps : reformuler dynamiquement tous les liens de votre site

C’est le plus long à faire … Tous les liens pointant vers nos articles vont donc pouvoir être réécrits « proprement » en PHP, grâce à notre fonction format_url(),  pour se présenter ainsi (dans notre exemple ci-dessus, adaptez le code à votre site) :

<a href="
<? echo format_url($nom_categorie)),'/',format_url($nom_article),'_',$ref_article,'-',$num_categorie; ?>.html">
lien vers l'article</a>

4eme temps : créer un fichier .htaccess de réécriture dynamique

Il va maintenant falloir que le serveur « décrypte » à la volée cette URL « /meubles-de-jardin/chaise-en-teck-huile.html » qui n’a aucune existance physique, et l’interprète comme étant « /fiche-produit.php?id=45&cat=52 » pour rediriger l’internaute vers la bonne page.

C’est le but de ce fichier .htaccess. Comme celui du fichier de test du 1er temps de ce tutoriel, c’est un simple fichier texte renommé (directement sur le serveur si vous êtes sous Windows en local) .htaccess

Il commencera toujours par :

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks
# Activation du module de réécriture d'URL :
RewriteEngine on

La suite va dépendre de ce que vous voulez réécrire…
La structure de l’ordre va se composer ainsi :

RewriteRule  URL_A_RÉÉCRIRE  URL_RÉÉCRITE
  1. RewriteRule est un mot-clé spécifique au module mod_rewrite qui indique que la ligne définit une règle de réécriture.
  2. Ensuite vient l’URL à réécrire, c’est-à-dire l’URL « propre » sans existence physique sur le serveur.
  3. Enfin vient l’URL réécrite, c’est-à-dire l’URL telle qu’elle sera appelée en interne sur le serveur.
  4. Ces 3 éléments doivent être écrits sur une seule ligne, et séparés par un ou plusieurs espaces à chaque fois

Le format de l’URL à réécrire (la partie de gauche) est basé sur les expressions régulières. Ne vous inquiétez pas, pour la plupart des cas c’est très simple. Voici la liste des principaux éléments pris en considération dans les règles de réécriture :

^ : Indique le début de l’URL à récrire. Ce caractère est facultatif mais il est plus rigoureux de l’utiliser.
() : Les parenthèses servent à encadrer une variable dont la valeur est récupérée dans la 3ème partie de la ligne (titre=$1 indique que la variable nommée titre prendra la valeur située dans la première paire de parenthèses, $1 est la première variable, $2 la seconde, etc.)
[0-9] :  Indique que la variable est composée d’un ou plusieurs chiffres.
.*
: Indique que la variable est composée de n’importe quels caractères alphanumériques
\.html : l’extension finale du fichier réécrit
$ : Indique la fin de l’URL à réécrire. Ce caractère est facultatif mais il est plus rigoureux de l’utiliser.

L’URL réécrite (la partie de droite) est celle qui s’afficherait normalement sur votre site si vous n’aviez pas refait tous les liens… Elle comporte juste 1 règle :
[L] : Drapeau (option) signifiant « Last », indiquant au module de réécriture qu’il doit s’arrêter.

Plus visuellement par exemple (cliquez pour agrandir) :

Réécriture d'URL source

Dans notre exemple avec la chaise en teck huilé, le fichier .htaccess sera donc écrit ainsi :

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)/(.*)_([1-9])-([1-9])\.html$ produit.php?nom_cat=$1&nom_prod=$2&ref_prod=$3&num_cat=$4 [L]

 

That’s all folk ! :happy:

(sources : 123)

17 Responses to “Réécriture d’URL, ou URL Rewriting : petit tutoriel”

17 Commentaires

  1. streamingox dit :

    bonjour,

    si je veux recuperer meme les caractères non alphanumériques, plus concretement https:// https://exemple.co/url/https://www.facebook.com/1298387
    si je veux recuperer la page facebook
    RewriteRule ^url/(.+)?$ page.php?url=$1
    je dois avoir https://www.facebook.com/1298387 comme résultat mais ca ne marche pas.

    de l’aide svp ??

  2. greendev dit :

    Merci vraiment pour ce tuto, enfin j’ai trouvé ce que je cherchais depuis longtemps

  3. khaled dit :

    Merci pour ce tuto, GOOOOOOOOOOOOOOOOOOD :D

  4. tth75320 dit :

    Merci pour ce tuto, très pédagogique et qui m’a fait gagner un temps précieux. Bonne continuation

  5. webtolosa dit :

    merci :)

  6. Ouaouane dit :

    Merci pour ce tutoriel, très bien écrit. Juste une erreur de parenthèse dans l’un des exemples. Et parce que je suis resté bloqué quelques minutes pour un truc tout bête : Pensez à prendre également en compte le « 0 » (zéro) dans votre règle d’url rewriting sinon tous vos produits dont l’identifiant comporte un zéro renverra une page inexistante !

    Donc au lieu de :

    RewriteRule ^(.*)/(.*)_([1-9])-([1-9])\.html$ produit.php?nom_cat=$1&nom_prod=$2&ref_prod=$3&num_cat=$4 [L]

    Ecrire :
    RewriteRule ^(.*)/(.*)_([0-9])-([0-9])\.html$ produit.php?nom_cat=$1&nom_prod=$2&ref_prod=$3&num_cat=$4 [L]

  7. Karter dit :

    Merci, cela peut etre utile !

  8. webtolosa dit :

    Qu’appelle-tu « format » ? Si c’est « langage », l’exemple utilisé est en PHP.

  9. gaassis dit :

    est-ce qu’on peut utiliser n’importe quel format

  10. Foxy dit :

    Slt, j’arrive vraiment pas a voir le resultat, l’url reste toujour pareille. Voici mon code:

    # Le serveur doit suivre les liens symboliques :
    Options +FollowSymlinks

    # Activation du module de réécriture d’URL :
    RewriteEngine on

    #————————————————–
    # Règles de réécriture d’URL :
    #————————————————–

    # Réécriture de ory.html vers ory.php
    RewriteRule ^ory\.html$ /ory.php [L]

    Mais dans l’url je vois toujours ory.php
    Aidez moi

  11. JMichel : Creation de site Internet dit :

    Ca prend un peu plus de temps à la création des pages mais c’est très payant. Merci pour ce tuto !

  12. Merci pour ce billet, Christian, en complément regardez le billet de WRI qui est vraiment pas mal aussi, peut-être pourra-t’il vous permettre d’y voir plus clair… : http://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting

    Bonne lecture :-)

  13. camlag dit :

    Cet exemple fonctionne si les parametres passés sont de un seul caractère

  14. Raphael dit :

    ok mais j’ai tester sur mon serveur, mais sans succès :|

  15. webtolosa dit :

    les .htaccess ne fonctionnent pas sous windows : teste sur son serveur :)

  16. Raphael dit :

    Bonjour moi j’ai un soucis au niveau de mon teste en local avec wamp tous les module son activé mais sa ne marche pas? vous avez une idée du pourquoi du comment?

  17. christian dit :

    Bonjour,

    Je n’arrive pas à faire fonctionner l’URL rewrinting.

    Pouvez-vous m’aider?

    Url à retranscrire:
    http://unebonneoccasion.fr/viewlisting.php?view=632

    mon .htacces
    # Le serveur doit suivre les liens symboliques :
    Options +FollowSymlinks

    # Activation du module de réécriture d’URL :
    RewriteEngine on

    #————————————————–
    # Règles de réécriture d’URL :
    #————————————————–

    RewriteRule ^(.*)-([0-9]*)\.php$ viewlisting.php?titre=$1&view=$2 [L]

    Pourquoi cela ne fonctionne pas?

    Merci pour votre aide

Commentaire

Name

Mail (ne sera pas publié)

Website

Laisser ces deux champs tels quels :
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: