&mymail;"> ]> p4bl0's blog > URL Rewriting chez Free

URL Rewriting chez Free

Le mod_rewrite d'apache n'est pas disponible chez Free mais j'ai fais en sorte d'avoir quand même de jolies url pour ce site. Je vais dans cet article vous expliquer comment fonctionne mon système de pseudo url rewriting.
Attention : il faut avoir des bases au moins en PHP pour comprendre cet article, il n'est pas destiné aux débutants !

Mise à jour le 18/03/2007 : J'ai posté un article plus récent avec une nouvelle méthode d'url rewriting chez Free qui utilise le MultiViews et qui a comme avantage de ne plus avoir besoin du ? dans l'url (voir la seconde partie de l'article).

1/ Pourquoi ?

Le but premier est que les url soient significatives car pour la plupart des moteurs de recherches l'url est une source de mot-clefs.
L'autre but est d'avoir de jolies url pour le visiteur.

2/ Le choix de la méthode

Il y a en effet deux méthodes possibles :
  • Utiliser une page d'erreur 404.
  • Faire passer l'url en arguments à un script.
La première solution consiste en fait à utiliser une page d'erreur 404 personnalisée qui analyse l'url et renvoie vers la page demandée.
Ce n'est pas la solution que j'ai choisi, simplement parce que j'ai lu je ne sais plus où que ça n'est pas terrible pour le référencement : certains moteurs de recherches ne vont pas indexer les pages d'erreurs 404.
J'ai donc choisi de faire passer l'url en argument à un script php qui l'analyse et affiche la page voulue.

3/ La technique

Le mod_rewrite n'étant pas disponible, j'ai choisi de faire passer l'url réécrite comme un argument dans l'url, après le ? donc.
"/blog/post/URL-Rewriting-chez-Free.html"
pointe en fait vers la page index.php à la racine du site, qui elle se charge de récupérer les info présente dans l'url et d'afficher la page en question.
Pour faire cela, ce n'est pas bien compliquer, et on est grandement aidé par PHP qui nous fourni une variable prédéfini qui contient en fait la chaîne de caractère présente après le ? dans l'url qui a permis d'accéder à la page : $_SERVER['QUERY_STRING'].
Ce que je fais (enfin, ce que le script fait) ensuite, c'est de découper cette chaîne de caractère afin d'en récupérer les informations utiles.
Pour cela, j'utilise la fonction php explode qui coupe la chaîne en segments (entre chaque /). Ces valeurs sont ensuite rangées dans des variables puis le script affiche la page voulue, page qui peut se faire en fonction de ce que contiennent les variables.

4/ Le code

 → Code : url rewriting via un script php
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
<?php if (substr($_SERVER['QUERY_STRING'], -5) == '.html') { $_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'], 0, -5); } elseif (substr($_SERVER['QUERY_STRING'], -16) == '.html#addComment') { $_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'], 0, -16); } $arg = explode('/', $_SERVER['QUERY_STRING']); if (!isset($arg[1])) { require('home.php'); } elseif (strtolower($arg[1]) == 'blog') { if (isset($arg[2]) &amp;&amp; !empty($arg[2]) &amp;&amp; isset($arg[3]) &amp;&amp; !empty($arg[3])) { $_GET[$arg[2]] = $arg[3]; } if (isset($arg[4]) &amp;&amp; !empty($arg[4]) &amp;&amp; isset($arg[5]) &amp;&amp; !empty($arg[5])) { $_GET[$arg[4]] = $arg[5]; } require('blog.php'); } elseif (strtolower($arg[1]) == 'creations') { require('creations.php'); } elseif (strtolower($arg[1]) == 'contact') { require('contact.php'); } else { require('home.php'); } ?>
Comme vous pouvez le voir, les valeurs récupéré dans l'url sont ranger dans $_GET. Ça permet de pouvoir accéder au script avec l'url non "réécrite", comme avec le vrai url rewriting. En effet, "http://pablo.rauzy.free.fr/blog.php?post=URL-Rewriting-chez-Free" pointe sur la même page que l'url mentionné plus haut dans l'article.

Et voilà :-)
Tags : développement web, php, Free | 7 commentaires | #3 | Trackback

Commentaires

gloup gloup :

Le 09 Décembre 2006 à 22:26
héhé ;-)

Alex :

Le 20 Janvier 2007 à 15:10
Il est tout à fait possible de faire de l'url rewriting sur free ou les autres sans passer par le mod_rewrite de apache.
Un ErrorDocument qui est une page PHP fera tout à fait l'affaire (il faut juste bien penser à forcer les header HTTP sur 200 OK)
url rewriting != mod_rewrite
Oui, c'est une des solutions possible, ce n'est pas celle que j'ai choisi mais elle est effectivement à prendre en considération :-)

Tom Miller :

Le 06 Février 2007 à 09:16
meci pour cette Article !

j'adore votre site !
Tom Miller

Florent :

Le 01 Mai 2007 à 11:13
Salut,

En effet ta solution est pas mal du tout....
Mais comment google voit-il tes URL? prend-il en compte l'URL réécrite ou l'ancienne pour son indexation ??
Google voit les url réécrites pour son indexation ne t'en fait pas ;-). Mais tu devrait plutôt utiliser ma nouvelle méthode, sans le point d'interrogation grâce au MultiViews :-)

toto :

Le 03 Septembre 2008 à 19:26
mais on le mais ou le script ?
Ben tu le met de manière à ce qu'il soit avant le code ou tu utilise les $_GET. Mais va voir la nouvelle méthode (linké en haut d'article et sur le commentaire au dessus, c'est plus propre :-).

renault :

Le 02 Janvier 2011 à 17:48
Si on fait une redirection a la fin du programme. Pour que google reference les nouvelles url que doit ton coder?
J'ai essayer:
header("Status: 301 Moved Permanently", false, 301);
header('Location: '.$newurl);

Mais j'ai pas l'impression que ca marche!!!
Si quelqu'un a la solution HELP ME
header('301 Moved Permanently');
header('Location: '.$newurl);
exit;

gilles :

Le 18 Juillet 2011 à 15:46
Pour info, ton lien "ma nouvelle méthode" ne fonctionne pas ou plus
Merci pour les tutos !!
De rien :-).
Ça marche chez moi, aussi bien dans le commentaire en question que dans l'article.

Ajouter un commentaire :

Formatage du texte : ##gras##, //italique//, --barré--, __souligné__.
Pour créer un lien, utilisez la syntaxe suivante : @[http://adresse/du/lien/](texte du lien).
Pour insérer du code, mettez le entre double crochets : [[votre code]].
Votre adresse email ne sera pas affichée.