Depuis ce matin, ça danse sur les Data Centers de Google. La première mise à jour du Page Rank de l’année 2008 semble bien être en cours.
Et je gage que mêmes ceux qui clament haut et fort que "le PR, ça ne sert à rien" sont comme les autres en train de surveiller l’évolution de la petite barre verte sur leurs sites.
Contrairement aux sites dits "statiques" dont les adresses (URL) ont toujours un aspect bien propre du genre http://mon.site.com/accueil.html, les sites dynamiques, notamment les CMS et les blogs, les forum ou les annuaires basés sur des scripts PHP présentent généralement des URL très exotiques du genre http://mon.site.com/viewtopic.php ?topic_id=585&forum=1 qui peuvent laisser perplexe le visiteur autant que les robots d’indexation d’un moteur de recherche.
Quand les sites dynamiques ont fait leur apparition, les moteurs de recherches étaient tout à fait incapables de les indexer correctement, et bien souvent, seule la page d’accueil était présente dans l’index, le reste du site restant inconnu des moteurs.
Ce n’est plus vraiment le cas aujourd’hui, et la plupart des moteurs sont maintenant capables d’indexer sans problème une URL dynamique comportant jusqu’à deux paramètres. Mais même aujourd’hui, la plupart des webmasters préfèrent présenter aux visiteurs (et les robots d’ indexations) des URL sous une forme plus "sexy". En effet, avoir dans la barre de navigation une adresse comme http://mon.site.com/url_rewriting_pour_les_nuls.html, ça a beaucoup plus de geule que l’adresse http://mon.site.com/rubrique.php3 ?id_rubrique=1. (et de plus, ça permet de mettre un ou deux mots clés dans l’adresse de la page, ce qui peut aider à un meilleur positionnement sur les moteurs de recherche, ce qui n’est pas forcément à négliger.)
C’est l’action de modifier les adresses dynamiques d’origine pour les présenter sous la forme d’adresses statiques qu’on appelle URL rewriting.
|
En fonction du langage de script et du type de serveur web utilisé, les solutions techniques pour "maquiller" les adresses dynamiques seront très différentes. Je me bornerai dans cette article à ne parler que de ce que je connais, c’est à dire le langage de script PHP et le serveur Apache (ce qui représente quand même la majorité des sites internet). |
Pour les serveurs Apache, les solutions seront également différentes selon que le mod_rewrite est installé ou non, ou que votre hébergeur accepte ou non l’utilisation du fichier .htaccess.
Cas le plus simple...et le plus fréquent : le mod_rewrite est installé et vous avez pouvez utiliser le fichier .htaccess pour donner des directives au serveur.
Tout d’abord, pour que ce soit bien clair : ce n’est pas le fichier .htaccess qui réécrit vos URL dynamiques en URL "propres". C’est votre script PHP qui doit le faire.
Voici un exemple de ré-écriture d’URL tiré de Rewrite YourPHPAnnuaire mais il existe des milliers d’autres manières de ré-écrire des URL.
Génération de l’URL d’une sous-catégorie de l’annuaire par le script index.php :
<a href="<?php echo id_to_url($une_souscat["id"],$une_souscat["cat_name"],'1'); ?>" class="link_scat_index_annuaire"><?php echo htmlspecialchars($une_souscat["cat_name"]); ?></a>
La génération de l’URL fait appel à la fonction id_to_url décrite ci-dessous :
function id_to_url ($id,$cat,$page,$type='')
{
global $T_infos, $PMA_infos;
// Déterminer s'il faut faire de l'URL Rewritting
if ( $PMA_infos['url_rewritting'] )
{
list( $suffixe, $caracteres, $car_speciaux, $car_normaux ) = id_to_url_info();
// Supprime les accents, supprime les caractères non-alphanumériques, convertit en minuscules, remplace les tirets multiples par un tiret unique, supprime le dernier caractère si c'est un tiret, et limite la chaine aux $caractères premiers caractères
$url = substr( eregi_replace( "\-$", '', eregi_replace( "\-+", '-', strtolower( eregi_replace( "[^A-Za-z0-9]", '-', str_replace($car_speciaux, $car_normaux, $cat) ) ) ) ), 0, $caracteres );
// Applique le suffixe à l'url
$url = $type=='keyw' ? "$url-k$page-$id$suffixe" : "$url-p$page-$id$suffixe";
return $url;
}
else
{
if ( $type=='keyw' ) {
return "search.php?action=seek&mots=id$id&nb_results2show=20&booleen=AND";
} else {
return $page==1 ? "index.php?cat_id=$id" : "index.php?cat_id=$id&page=$page";
};
};
}
Je vous passe l’explication détaillée de toutes les instructions PHP, mais en clair, ce que fait la fonction id_to_url quand elle reçoit les paramètres $id=74, cat=annuaires généralistes et page = 2, c’est vérifier si j’ai activé ou non l’URL Rewriting dans les paramètres de mon annuaire :
Si j’ai choisi d’utiliser l’URL Rewriting, après quelques manipulations, la fonction me renvoie l’URL sous la forme :
http://mon.annuaire.com/annuaires-generalistes-p2-74.html
sinon, elle me la renvoie sous la forme dynamique, la seule qui soit directement interprétable par mon serveur :
http://mon.annuaire.com/index.php ?cat_id=74&page=2
Maintenant que se passe-t-il quand un visiteur clique sur mon URL relookée : la page annuaires-generalistes-p2-74.html n’existe pas sur mon serveur, et celui-ci doit me renvoyer une erreur HTTP 404.
Mais comme je suis un petit futé, j’ai pris soin de mettre en place un fichier .htaccess qui contient les directives suivantes :
RewriteEngine on
RewriteRule -p([0-9]*)-([0-9]+)\.html$ /index.php?cat_id=$2&page=$1 [L]
La première directive (RewriteEngine on) indique qu’on va utiliser le module rewrite (mod_rewrite) d’Apache.
La directive suivante indique au serveur Apache comment traiter l’URL, c’est à dire comment décortiquer la chaine de caractères fournie et les manipuler pour les transformer en une URL correspondant à une page existante :
Dans la chaine http://mon.annuaire.com/annuaires-generalistes-p2-74.html, tu prends la première série de chiffres que tu rencontres et tu alimentes le paramètre $1, puis tu alimentes le paramètre $2 avec la deuxième série de chiffres, ensuite tu iras chercher la page index.php avec les paramètres adéquates.
Comme on le voit, c’est bien le code PHP qui détermine de quelle manière mes URL seront présentées au visiteur (ou au robot) et le fichier .htaccess n’est là que pour retraduire en sens inverse l’adresse relookée en une adresse interprétable par le serveur.