Version en ligne

Tutoriel : Simuler l'URL rewriting avec l'erreur 404

Table des matières

Simuler l'URL rewriting avec l'erreur 404
Comment allons-nous procéder ?
Tester la redirection en cas d'erreur
Le système
Les codes complets

Simuler l'URL rewriting avec l'erreur 404

Comment allons-nous procéder ?

Dans ce tutoriel, je vais vous apprendre à simuler l'URL rewriting.
Il y a déjà un tutoriel sur ce site qui traite de ce sujet (celui-ci) mais ici, je vais utiliser une technique un peu plus particulière qui utilise un fichier .htaccess et l'erreur 404.
L'intérêt de cette technique est qu'elle peut marcher sur des serveurs qui n'autorisent pas l'URL rewriting classique.

Bonne lecture. ;)

Comment allons-nous procéder ?

Tester la redirection en cas d'erreur

Nous allons utiliser l'erreur 404 !
C'est l'erreur signifiant que le fichier auquel le visiteur a tenté d'accéder n'existe pas. ^^

Pour en savoir plus sur cette commande, il y a un tutoriel : page d'erreur perso.

Nous allons donc dire à Apache que, lorsqu'un fichier n'est pas trouvé, on redirige vers une page qui va décortiquer l'adresse demandée pour inclure le bon fichier.

Par exemple...

http://www.monsite.com/objet.php?obj=livre

... deviendra...

http://www.monsite.com/objet-livre.html

... ou encore...

http://www.monsite.com/objet/livre.html

La classe, non ? ;)

Allez, on commence par créer les fichiers dont on aura besoin avant de tester si ça peut marcher ou courir sur le serveur que vous utiliserez. :)


Tester la redirection en cas d'erreur

Tester la redirection en cas d'erreur

Comment allons-nous procéder ? Le système

Donc, on aura besoin :

Le fichier index.php

Créez un fichier index.php dans lequel vous écrirez :

Youpi, ça marche !

Vous verrez ensuite pourquoi. ^^

Le fichier .htaccess

Créez maintenant un fichier .htaccess dans lequel vous mettrez ceci :

ErrorDocument 404 /index.php

Cela aura pour action, si un fichier n'est pas trouvé, de rediriger le visiteur vers le fichier index.php.

Testons...

Maintenant, allez sur une page qui n'existe pas sur votre site.
Exemple :

http://www.monsite.com/page_qui_n_existe_pas.html

Si vous voyez écrit « Youpi ça marche ! » et que l'adresse dans la barre d'adresse de votre navigateur est toujours l'adresse du fichier qui n'existe pas, vous pouvez continuer à lire, sinon DEHORS !
Non, je rigole, vous pouvez rester mais bon, ça ne fonctionnera pas ! ^^

Exemple où tout est bon :

Image utilisateur

Allez hop, on passe à la réalisation du système. :)


Comment allons-nous procéder ? Le système

Le système

Tester la redirection en cas d'erreur Les codes complets

Alors, ici, mes URL seront du type :

http://www.monsite.com/objet/livre.html

Commencez par effacer « Youpi ça marche ! » du fichier index.php.
On va donc coder le système de redirection dans index.php.

On commence par récupérer l'adresse qui a été demandée avec $_SERVER['REQUEST_URI'] et on va la « nettoyer » puis la découper :

<?php
$adresse1 = trim(str_replace('.html', '', $_SERVER['REQUEST_URI']), '/').'/';
$adresse = explode('/', $adresse1);
?>

Ce bout de code aura pour action de transformer /objet/livre.html en objet/livre puis de créer un tableau découpé en fonction des /.

On va donc récupérer le nom de la page :

<?php
$page = $adresse[FIRST_DATA_URL];
?>

Puis on va inclure cette page :

<?php
if(file_exists('./'.$page.'.php') AND $page != 'index') {
	include('./'.$page.'.php');
}
?>

Vous pouvez ajouter ce qui suit. ;)

<?php
else {
	echo 'Ce fichier n\'existe pas !'; // Revient à une erreur 404 
	exit();
}
?>

Maintenant, créez une page objet.php dans laquelle vous mettrez le code :

<?php
echo 'Je suis la page objet et j\'ai un cadeau pour vous : un '. $adresse[FIRST_DATA_URL+1];
?>

Voilà ce que j'obtiens :

Image utilisateur

Essayez de changer livre.html en ordinateur.html, ça fait encore plus plaisir ! ^^


Tester la redirection en cas d'erreur Les codes complets

Les codes complets

Le système

Le fichier .htaccess

ErrorDocument 404 /index.php

Le fichier index.php

<?php
$adresse1 = trim(str_replace('.html', '', $_SERVER['REQUEST_URI']), '/').'/';
$adresse = explode('/', $adresse1);
define('FIRST_DATA_URL', 0);
$page = $adresse[FIRST_DATA_URL];

if(file_exists($page.'.php') AND $page != 'index') {
	include($page.'.php');
}
else {
	echo 'Fichier introuvable';
	exit();
}
?>

Le fichier objet.php

<?php
echo 'Je suis la page objet et j\'ai un cadeau pour vous : un '. $adresse[FIRST_DATA_URL+1];
?>

Une fois que vous avez compris le principe, vous pouvez très bien créer des URL du type :

http://www.monsite.com/blog/2008/06/07/1-nom-de-l-article.html

Dans ce cas, supposons que 1 soit l'ID de l'article et que nom-de-l-article soit de la décoration, vous devrez faire :

<?php
$infos = explode('-', $adresse[FIRST_DATA_URL+4]);
$id_de_larticle = $infos[0];
?>

Ça fait tout de suite plus pro ! :)

Si vous avez des questions, vous pouvez me les poser par MP !

@+

Image utilisateur

P.S. — Je tiens à remercier les zCorrecteurs Guill@ume et Whitecoyote pour leur zCorrection rapide et efficace.


Le système