banniere
Ecrit par leknoppix le 24-06-2009 à 21:32:24
Les urls rewritings

Ce tutoriel "urls rewritings" sur http://www.leknoppix.fr est mis à disposition selon les termes de la licence Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique 2.0 France.
Basé sur une oeuvre de leknoppix.fr.


L'URL Rewriting, ou "réécriture d'adresse", est une technique utilisée pour optimiser le référencement des sites dynamiques : des noms de pages virtuels sont crées pour faire croire aux moteurs de recherche, que chaque contenu est présent dans un fichier différent.

Prenons un exemple :

Article sur les téléphones mobiles

Adresse originale :     index.php?type=contenu&id=5
Adresse réécrite  :     contenu_5_telephone-mobile.html

Article sur la télévision numérique

Adresse originale :     index.php?type=contenu&id=7
Adresse réecrite  :     contenu_7_television-numerique.html

Ce tutoriel montrera comment mettre en place les « url rewriting ». En fonction du site ou de la structure hébergeant le site internet, « l'url rewriting » peut ne pas être activée.

I Est-ce que je peux utiliser la réécriture d’adresse ?

Nous allons dans un premier temps, tester si le module de réécriture d’adresse fonctionne. Créer un fichier test.php dans lequel vous mettrez le code ci-dessous.

<?php
echo (" test d'url rewriting simple") ;
?>

Nous devons maintenant activer et créer les paramètres nécessaires pour voir et contrôler si le module « rewrite_mod » est bel et bien activé. Nous allons créer un ficher « .htaccess » :

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

NB : Vous ne pouvez pas nommer un fichier « .htaccess » à partir de Windows (Windows ne vous autorisera pas à le faire). L’astuce pour pouvoir le créer c’est de créer un fichier  texte avec le bloc note (.txt). Ouvrez-le puis faites enregistrer-sous et nommez-le .htaccess entre guillemet (« .htaccess »). Voilà vous avez réussi !!! maintenant pour l’éditer, il suffit de l’ouvrir avec le bloc note de Windows.

Ces deux fichiers devront être mis dans le même dossier sur le serveur ftp stockant le site internet. Affichez dans votre navigateur la page test.php mais en remplaçant le « .php » par « .html » puisque dans notre règle, nous avons spécifié de remplacer « test.php » par « test.html »

A cette étape, deux cas peuvent se produire :

  • Le premier est l'affichage au navigateur du message « test d'url rewriting simple ». Dans ce cas, le module « rewrite_mod » est fonctionnel, il ne manque plus qu'à mettre en place d'autres règle de réécritures pour améliorer le référencement du site.
  • Le deuxième est que le navigateur renvoie une erreur 404, c'est-à-dire une page non trouvée.

Si vous êtes dans le second cas, nous allons voir ensemble s'il est possible de l'activer. Si vous avez un hébergement, demandez leur d'activer le module rewrite si possible. La plupart des hébergeurs web, ont, par défaut, ce module d'activé.
Dans certains cas, la directive RewriteBase définit explicitement l'URL de base pour les réécritures par répertoire. Remplacez le contenu du fichier .htaccess par le code ci-dessous: 

RewriteEngine On
RewriteBase /
RewriteRule  ^test.html$  test.php [L]

Relancez votre navigateur web avec la page test.html. Si l'affichage fonctionne, le module rewrite fonctionne et accepte les url rewriting. Dans le cas contraire, consultez la troisième partie.

Quelques explications:
L'instruction RewriteEngine: Cette ligne permet l'activation de la réécriture d'URL. Peu importe les régles de réécriture que vous mettrez en place, cette instruction devra toujours être mise dans votre fichier .htaccess.
L'instruction RewriteRule: Cette ligne est indispensable et introduit chaque règle d'écriture.

II Paramétrer ses propres url rewriting:

Dans cette partie, nous allons voir comment créer des urls rewriting très spécifique. Afin de pouvoir comprendre le fonctionnement des différents paramètres de réécriture, il faut avoir des connaissances dans les techniques « regex ». Mais ne vous inquiétez pas, nous allons voir ça ensemble et vous devriez comprendre le principe sans avoir à connaitre les techniques « regex »

NB : les regex sont des expressions régulières qui permettent de réaliser des recherches dans des chaînes de caractères (par exemple une phrase). On s’en sert par exemple pour vérifier que l’adresse mail rentrée par un internaute est une forme valide (contient au moins un « @ »), modifier des dates ou même créer des langages simplifiés à partir du HTML comme le bbcode utilisé dans les forums pour mettre en forme le texte (par exemple [quote]c’est une citation[/quote] ).

Supposons une url du type http://nom_de_domaine/article.php?id=2 dans lequel l'id correspond à l'id de l'article enregistré dans la base de données. Il faudrait donc créer une url qui sera reconnu unique par les moteurs de recherche. Dans cette url, le seul paramètre changeant est l'identifiant de l'article. Nous allons créer une url claire et simple.

Dans ce premier exemple, on pourra taper http://nom_de_domaine/article-2.html et arriver à la page http://nom_de_domaine/article.php?id=2 tout en conservant la fausse adresse dans l'URL,  ce qu’aucun internaute ne pourra savoir directement. Pour cela, il faut utiliser l'instruction suivante: 

RewriteEngine On
RewriteRule ^article-2.html$ /article.php?id=2 [L]

Pour l'article ayant pour id, le numéro 3, l'instruction sera la même mais avec un 3 à la place du 2. Il faudra donc ajouter l'instruction suivant à l'htaccess précédent. 

RewriteRule ^article-3.html$ /article.php?id=3 [L] 

Et ainsi de suite pour les articles suivants. Par ce procéder, une ligne d'instruction devra être ajoutée chaque fois qu'un article est ajouté. A la longue, ce procédé risque d'être long et contraignant. Nous allons donc utiliser la méthode des Regex afin de gagner des lignes dans le htaccess et ainsi éviter de devoir écrire une instruction chaque fois qu'un article a été ajouté. Voici l'instruction qui remplace toute les précédentes. Partons d'un constat:

Url réelle physiquement                Url rewriting virtuelle
Article.php?id=5                               Article-2.html
Article.php?id=80                             Article-80.html
Article.php?id=1500                        Article-1500.html

En résumé, pour un article de type article.php?id=X où X correspond à l'identifiant de l'article, ce dernier aura l'url rewriting article-X.html. Afin que cela soit automatique, voici l'instruction nécessaire:

RewriteEngine On
RewriteRule ^article-([0-9]*).html$ /article.php?id=$1 [L]

Explication de cette instruction:
Le symbole $1 peut être considéré comme une variable qui prendra pour valeur l'identifiant de l'article. L'élément (0-9]*) autorise tous les chiffres, autant de fois qu'on veut dans l'adresse.

Il peut être également utile de créer une url virtuelle qui correspondra à une url du type page.php?id=2&page=20. Pour cela, il faut analyser l'url, cette dernière possède 2 variables distinctes, celle de l'id et celle de la page. Il faut donc créer une nouvelle instruction qui permettre de créer des url virtuelle et correctement lisible.

RewriteEngine On
RewriteRule ^page-([0-9]*)-([0-9]*).html$ /page.php?id=$1&page=$2 [L]

Le symbole $1 prendra le premier paramètre et $2 le second. Dans le cas où il y a d'autres paramètres, il faut rajouter d'autres variables.

3ème paramètre dans une url    $3
4ème paramètre dans une url    $4
Xème paramètre dans une url    $X

Il se peut dans certains cas, qu’une url affiche le titre d'un article un peu comme fait sur le site Média-Mag ( http://media-mag.iut-tarbes.fr/2009/03/13/les-nouveautes-apple/ ). Pour cela, il est nécessaire de mettre dans une variable un champs texte. Pour que cela fonctionne, il faut indiquer dans le htaccess que la variable dans l'url virtuelle sera avec des caractères:

RewriteEngine On RewriteRule ^article-([a-z]*).html$ /page.php?text=$1 [L]
 

([0-9])                        Affichera 1 seul chiffre
([0-9]{1,2})                Autorise l'affichage d'un ou de deux chiffres
([0-9]*)                       Affichera tous les chiffres, autant de fois que nécessaire
([a-z])                         Affichera tous les caractères de l'alphabet
(-[a-z]*)                      Affichera toutes les lettres et tirets, autant de fois que nécessaire
([0-9a-zA-Z_-]*)        Affichera toutes les lettres, chiffres, tiret et underscore, autant de fois que nécessaire

Ci dessous quelques exemples d'url rewriting:

Vrai URL Url virtuelle RewriteRule necessaire
article.php?id=12&page=2&rubrique=5 article-12-2-5.html RewriteRule ^article-([0-9]*)-([0-9]*)-([0-9]*).html$ /article.php?id=$1&page=$2&rubrique=$3
lecture.php?annee=2009&titre=bienvenue-sur-mediamag 2009/bienvenue-sur-mediamag.html RewriteRule ^([0-9]{1,4})/(([0-9a-zA-Z_-]*).html$ /lecture.php?id=$1&titre=$2

III De la redirection d'url sans le moteur rewrite:

Sur certains serveur, comme nous l'avons vu plus haut, le module de réécriture d’URL n'est pas activé. L'astuce que nous allons voir, consiste d’abord à planter (avec l’url réécrite) la page en erreur 404, et de la rediriger vers l’url physique d’une manière transparente. La première étape correspond à personnaliser la page d'erreur. Pour cela il faut créer un htaccess avec les instructions suivantes:

ErrorDocument 404 /erreur404.php 

Nous allons donc créé la page erreur404.php. Il s'agit d'un page très importante car elle permet de générer le contenu de la page désirée. Partons d'un exemple, nous avons cette page mapage.php?param=01 que nous voulons transformer en page-01.html. Nous allons utiliser des fonctions présentes dans le php afin d'afficher la bonne page. Voici le contenu de la page erreur404.php: 

<?php
if (ereg('^/page-([0-9]+).html$', $_SERVER['REDIRECT_URL'], $match))
{
    //modification du code retour
header("Status: 200 OK", false, 200);
    //alimentation du paramètre GET
    $_GET['param'] = $match[1];
    $_REQUEST['param'] = $match[1];
    include('mapage.php');
}
?>

Explication du code php:

  • l'instruction $_SERVER['REDIRECT_URL'] permet de récupérer l'url de la page.
  • La fonction ereg permet d'analyser l'url et de récupérer la variable qui nous intéresse.
  • L'instruction header("Status: 200 OK", false, 200); permet d'indiquer au moteur de recherche comme google et yahoo d'indexé la vrai page et non la page 404.


Création de la page mapage.php:

< ?php
echo ("Hello mon paramètre est :");
echo ($_GET[‘param’]) ;
?>

Le contenu de cette page est uniquement là pour prouver et tester l'url rewriting précédente. L'ensemble de la page erreur404.php est à modifier en fonction de l'url rewriting.

Creative Commons License

Publier sur mon compte twitterPublier sur mon viadeoPublier sur mon deliciousPublier sur mon compte twitter

Ajoute ton commentaire

Pseudo : *
E-Mail : *
MSN :
Site internet :
Blog :
Note : *
Commentaire : *
Ne pas compléter :

Le 18-08-2009 à 18:48:20 par leknoppix

avatarQui t'a dit de mettre mon astuce dans un htaccess, c'est dans tes pages php.

Note :  notenotenotenotenote
Le 18-08-2009 à 18:43:14 par Moi

avatarOui, très bonne solution. Mais nous ne pouvons en aucun cas ce permettre de le faire dans le fichier d'url rewriting ? Je pense déjà connaitre la réponse mais on ne sais jamais ^^ Bonne journée, et encore merci pour ces réponses.

Note :  notenotenotenotenote
Le 17-08-2009 à 16:25:03 par leknoppix

avatarL'astuce est très simple, tu abandonne les chiffres et tu recupère les intitulés. En gros dans ta base de donnée, tu rajoutes un champs (titreurl) qui correspond au titre de l'article, ou au titre de la rubrique sans caractère spéciaux et dans tes requetes tu met "where titreurl=$_get['id']...." Voila

Note :  notenotenotenotenote
1 - 2 - 3

© 2007-2017