HTACCESS - Du rewriting sans le moteur rewrite

HTACCESS - Du rewriting sans le moteur rewrite

Eh oui c'est possible !! Et il ne s'agit pas de faire un pseudo rewrite mais une vraie réécriture d'url. Pour faire cela nous allons être astucieux et allons faire croire au serveur qui sert la page et aux moteurs de recherches qui crawle la page que tout est en ordre malgré une petite dérive.

Sommaire :


HTACCESS - Du rewriting sans le moteur rewrite

Explication

La dérive 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.

Entrons dans le vif du sujet et essayons de réécrire page.php?param=01 en page-01.html

Pour commencer il nous faut planter la page, ben alors la c'est le plus simple. Si l'on veut planter une page en 404, suffit de donner une fausse url ;) Vu que l'url page-01.html n'existe pas, c'est du tout bon!!

Etape 1 - Création de la redirection

Début de la parade : il va nous falloir rediriger cette page erreur 404, pour cela vous devrez ajouter la ligne suivante dans votre fichier .htaccess :

.01
.02
  ErrorDocument 404 /erreur404.php
Etape 2 - Création du code PHP

Création du fichier erreur404.php avec le code PHP :
.01
.02
.03
.04
.05
.06
.07
.08
.09
.10
.11
.12
  <?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(
'page.php');
}
?>
Etape 3 - Création de la page réécrite

Création du fichier page.php avec ce code PHP :
.01
.02
.03
.04
.05
.06
.07
.08
  < ?php

echo 'hello mon parametre est :' ;
echo $_GET['param'] ;

?>
Etape 4 - Mise en service du script

Ca chauffe !! Mettez l'url page-01.html dans la barre d'adresse de votre navigateur et appuyer sur OK ;)

1° Le contenu de la page s'affiche correctement, Eurêka !! Vive urlrewriting.fr ;)
2° Le contenu ne s'affiche pas : Je regarde l'analyse ci dessous et j'essaye de comprendre d'où peux bien venir mon erreur. Si je rame trop, je viens vous voir sur le forum.


Analyse du code PHP

La première étape consiste à récupérer l'url avec $_SERVER['REDIRECT_URL']. Ensuite nous ferons un masque pour capturer l'url et analyser la chaine. Pour ceux qui connaissent l'urewriting, nous allons procéder de la même manière mais avec une fonction PCRE. La seule différence est que $_SERVER['REDIRECT_URL'] retourne 1 slash (/) en sortie contrairement au moteur apache de réécriture qui n'en retourne pas.

Important : Il ne faudra pas oublier de modifier le code retour 404 en 200 pour les moteurs de recherches !! Manquerais plus que notre page ne puisse pas être indexé par Google ou Yahoo !!… Rassurez vous, elle le sera ;)
.01
.02
  header("Status: 200 OK", false, 200);

N'oubliez pas d'envoyer les valeurs contenues dans le tableau associatif $_GET
$_GET : Contient les variables fournies par la chaîne URL.

Attention : L'exemple PHP ne tiens pas compte des magic quotes. Si vous désirez les utiliser vous devrez faire un code de ce genre (si page.php en tient compte et qu'elles sont actives) :

Remplacer :
$match[1]
Par :
addslashes($match[1])

Note :
L'exemple du script erreur404.php est équivalent à la règle suivante :
.01
.02
  RewriteRule ^page-([0-9]+).html$ /page.php?param=$1 [L]