Générer des URL optimisées pour le SEO avec PHP [URL Rewriting]
Voici comment activer la réécriture d'URL sur un site web en passant par le fichier .htaccess et le langage PHP.
Il est possible, en configurant son site, de créer des URL optimisées pour le référencement et plus faciles à comprendre pour l'internaute. Prenons l'exemple d'un site proposant des actualités.
Pour afficher normalement une actualité, le site utilisera cette URL : http//monsite.fr/actu.php?id=1. Il est possible de configurer un site pour obtenir une URL pointant sur la même page mais plus optimisée : http://monsite.fr/actualites/1. Il existe deux méthodes pour atteindre ce but.
La première méthode utilise le fichier ".htaccess" du site internet. Il faut au préalable activer le module "mod_rewrite" d'Apache et redémarrer le serveur. Dans le fichier, ajoutez la directive "RewriteEngine on" qui indiquera au serveur d'utiliser le module. Ensuite, utilisez la directive "RewriteRule" pour écrire les règles d'écriture. Voici la configuration permettant d'obtenir la redirection pour le site d'actualités :RewriteEngine on
RewriteRule ^/actualites/([0-9]+)$ /actu.php?id=$1
Vous trouverez des informations complémentaires pour créer vos propres règles d'écriture dans la documentation fournie par Apache. Cette méthode est la plus facile des deux, mais elle est aussi moins flexible.
Autre méthode : si vous avez besoin d'un système avec plus de possibilités, vous pouvez faire appel au langage PHP. Dans le fichier ".htaccess", ajoutez la directive suivante :
FallbackResource index.php
Cette directive indique au serveur de rediriger la requête sur le fichier index.php s'il ne trouve pas l'URL. C'est dans ce fichier que l'on va gérer toutes les URL. Voici un exemple de script qui fonctionne pour les actualités :
//On récupère l'URL demandée avec la variable $_SERVER['REQUEST_URI'], et on enlève le caractère "/" situé au début.$path = ltrim($_SERVER['REQUEST_URI'], '/');//On décompose l'URL en se basant sur les "/".$elements = explode('/', $path);//S'il n'y a pas d'éléments après le nom de domaine, alors on affiche la page d'accueil.if(count($elements) == 0) afficherAccueil();//Sinon, on utilise la fonction "array_shift" pour enlever le premier élément du tableau et ainsi le traiter.else switch(array_shift($elements)){ case 'actualites': //C'est une actualité, on transmet le reste des paramètres à la fonction qui va afficher l'actualité. afficherActualite($elements); break; case 'depeche': //Ici, on insère le code pour traiter une dépêche. default: //Si on arrive ici, c'est qu'aucun des cas n'a correspondu au traitement du site. L'URL n'est donc pas bonne, on le signale à l'internaute. header('HTTP/1.1 404 Not Found'); afficherErreurPageNonTrouvee();}
Cette dernière technique demande plus de traitements, mais elle offre plus de possibilités. Il s'agit d'ailleurs d'une technique parfois préférées par les grands sites internet développés en PHP et les CMS. Pour plus de simplicité, utilisez plutôt la première technique.
Sur .htaccess, lire aussi ces fiches pratiques |