Je vais vous présenter ici une technique de ré-écriture d’URL en PHP. Nous l’appellerons URL Rewriting via PATH_INFO. Celle-ci est un peu particulière, elle est indépendante d’Apache. Elle fonctionnera même si votre hébergeur désactive le ModRewrite ou si vous utilisez un serveur web alternatif.
Prenons une page imaginaire nommée http://monsite.com/recette.php?cat=tomate&id=2 et intitulée Mon plat secret qui détaillera notre succulente recette de pâtes à la tomate.
L’URL que nous souhaitons obtenir est http://monsite.com/recette/tomate/2-plat-secret.
Mais un exemple vaut mieux qu’un long discours… Rendez-vous sur le catalogue de l’Âne qui butine pour une démonstration.
Cette adresse présente trois avantages face à la première :
- Elle ne contient pas de paramètres (?cat=tomate&id=2), et c’est tant mieux. Les pages accessibles de cette manières, si elles ne sont pas tout simplement ignorées, ne seront que faiblement pris en compte par les moteurs de recherche.
- Des mots-clefs apparaissent dans l’adresse (plat-secret). Ils peuvent être simplement générés à partir du titre de la page (peut-être y reviendront nous dans un prochain article) et auront un puissant impact sur votre positionnement.
- L’extension de la page n’apparait plus. Vos adresses n’en seront que plus simples à mémoriser et les pirates de découvrirons pas du premier coup d’œil quelle technologie vous utilisez (ici PHP).
Ceci est un exemple de code que vous allons ensuite modifier :
<?php
/* Inclusion imaginaire... */
require ('init.php');
/* Requête dans la base de donnée et affichage... */
displayArticle ($_GET['cat'], $_GET['id']);
(Note : même en conservant l’extension la technique présentée ci-dessous fonctionnera.)Première opération, supprimer l’extension de la page. Si vous utilisez la configuration par défaut d’Apache c’est très facile, il n’y a rien à faire ! Si http://monsite.com/recette?cat=tomate&id=2 ne fonctionne pas il va falloir activer l’option MultiViews d’Apache. Il vous faudra ajouter à votre fichier .htaccess :
Options +MultiViews
Entrons dans le vif du sujet, la ré-écriture d’URL en PHP ! Pour ce faire nous utiliserons la variable d’environnement CGI nommée PATH_INFO. Cette variable contient tout ce qui est contenu dans l’adresse après le nom du fichier, y compris le “/” initial. Avec notre adresse http://monsite.com/recette.php/tomate/2-plat-secret, PATH_INFO contiendra /2-plat-secret. Nous y accèderons via le tableau super-global $_SERVER et en extrairons l’identifiant qui est séparé des mots clefs par le caractère “-“. Et maintenant, le code !
<?php
/* Inclusion imaginaire... */
require ('init.php');
/* On vérifie que l'adresse se poursuit après le nom du fichier */
if (array_key_exists ('PATH_INFO', $_SERVER)) {
/* On sépare les paramètres (à chaque occurence d'un slash) */
$para = explode ('/', $_SERVER['PATH_INFO']);
/* La catégorie est contenue dans la deuxième case du tableau $para. N'oublions pas que la première case ($para[0]) est vide à cause du slash initial */
$cat = $para[1];
/* On sépare l'identifiant des mots-clefs */
$p = explode ('-', $para[2]);
/* Ci-dessous l'identifiant */
$id = $p[0];
/* Et maintenant les mots-clefs (aucune utilité ici) */
$keywords = $p[1];
/* Requête dans la base de donnée et affichage... */
displayArticle (cat, $id);
Et nous voici avec notre jolie URL qui se référencera très bien dans les moteurs de recherche !
Attention elle n’est pas “indépendante d’apache”
La preuve sous IIS => 404
Il est possible de configurer IIS pour qu’il ai un comportement similaire à Apache. Pour ne pas avoir besoin de l’extension des fichiers il faut activer l’option “Remove File Extension/Redirect File” du menu “Application Mapping”.
La technique du PATH_INFO doit fonctionner avec IIS comme avec n’importe quel autre serveur capable d’exécuter des CGI. Il faut veiller que l’option “AllowPathInfoForScriptMappings” est utilisée. Pour plus d’infos : http://support.microsoft.com/kb/q184320/