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
| |
<?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 !!
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 !! Manquerait 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]
|