Table des matières

Rewrite URL en PHP chee Free.fr

Le module mod_rewrite d’Apache n’étant pas disponible chez Free.fr voici comment faire en PHP.

htaccess

La première modification porte sur le fichier .htaccess. Elle consiste à rediriger toutes les erreurs de type 404 vers un script PHP chargé de réécrire l’URL si elle est connue ou bien d’afficher une vraie erreur 404

ErrorDocument 404 /rewriteurl.php

Baniere ZLIO

rewriteurl.php

Le code PHP récupére l’url demandée, la compare avec preg_match à des URL connues. Si l’expression régulière concorde un header avec un code 200 est envoyé. Si necessaire les paramètres sont récupérés et passés au vrai script PHP par l’intermédiaire du tableau GET. Ensuite le vrai script est inclu avant de terminer le script rewriteurl.php avec la commande exit(). Si l’URL passée ne correspond à aucunes des expressions régulières alors une page de 404 est affichée.

<?php
$url=$_SERVER['REQUEST_URI']; // On récupère l'adresse demandée
 
/* Index */
if(preg_match("/\/articles\/?$/", $url, $match))
{
	header("HTTP/1.1 200 OK");
	// On inclut la page index.php et on termine le script
	include("index.php");
	exit();
}
/* article */
else
if(preg_match("/\/articles\/([0-9]+)\/?$/", $url, $match))
{
	header("HTTP/1.1 200 OK");
 	// Recuperation du paramètre, inclusion de la page index.php et on termine le script
	$_GET['st']=$match[1];
 	include("index.php");
	exit();
}
else
if(preg_match("/\/articles\/([A-Za-z]+)\/?$/", $url, $match))
{
	header("HTTP/1.1 200 OK");
 	// Recuperation du paramètre, inclusion de la page article.php et on termine le script
	$_GET['perso']=$match[1];
 	include("article.php");
	exit();
}
else
if(preg_match("/\/articles\/([A-Za-z]+)\/([0-9]+)\/?$/", $url, $match))
{
	header("HTTP/1.1 200 OK");
 	// Récupération des paramètres et inclusion la page article.php et on termine le script
	$_GET['perso']=$match[1];
	$_GET['st']=$match[2];
 	include("article.php");
	exit();
}
/* Erreur 404 */
else
{
header("HTTP/1.1 404 Page Not Found");
print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
print "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" lang=\"fr\">\n";
print "<head>\n";
print "<title>Error 404 - Not found</title>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
print "<meta http-equiv=\"cache-control\" content=\"no-cache\" />\n";
print "</head>\n";
print "<body style=\"font-family:arial;\">\n";
print "<h1 style=\"color:#0a328c;font-size:1.0em;\">Error 404 - Not found</h1>\n";
print "<p style=\"font-size:0.8em;\">Le fichier requis n'a pas &#233;t&#233; trouv&#233;. Il peut s'agir d'une erreur technique. Veuillez r&#233;essayer ult&#233;rieurement. Si vous ne pouvez pas acc&#233;der au fichier apr&#232;s plusieurs tentatives, cela signifie qu'il a &#233;t&#233; supprim&#233;\n";
print "</p>\n";
print "</body>\n";
print "</html>\n";
}
?>

Indexation

Le probléme avec cette méthode c’est l’indexation. En effet le client reçoit un code 404 et ensuite un code 200 (il est facile de le vérifier avec FireFox et l’extension Live HTTP Headers ). Il y a fort à parier que les robots de crawl des moteurs de recherche s’arrête au 404.