Aller au menu - Aller au contenu

Simuler l'URL rewriting avec l'erreur 404


Informations sur le tutoriel

Avatar
Auteur : titouille56
Visualisations : 32 394


Plus d'informations Plus d'informations
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 ?

Nous allons utiliser l'erreur 404 !
C'est l'erreur qui dit qu'un fichier n'existe pas. ^^

Pour ce tutoriel, vous avez besoin d'un hébergeur qui accepte les fichiers .htaccess et les commandes du type :
Code : Apache
1
ErrorDocument 404 /erreur404.php

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

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

Exemple...

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

... deviendra...

Code : Autre
1
http://www.monsite.com/objet-livre.html

... ou encore...

Code : Autre
1
http://www.monsite.com/objet/livre.html


La classe, non ? ;)

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

Tester la redirection en cas d'erreur

Donc, on aura besoin :
  • à la racine de votre site :
    • d'un fichier .htaccess,
    • d'un fichier index.php pour la redirection,
  • et où vous voulez :
    • de tous vos fichiers (ici, je n'utiliserai qu'un fichier objet.php).

Le fichier index.php



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

Code : PHP
1
Youpi ça marche !

Vous verrez ensuite pourquoi. ^^

Le fichier .htaccess



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

Code : Apache
1
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 :

Code : Autre
1
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. :)

Le système

Alors, ici, mes URL seront du type :

Code : Autre
1
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 :

Code : PHP
1
2
3
4
<?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 / .

Je fais mes tests dans le dossier tuto_ur/ donc mes URL une fois nettoyées seront du type tuto_ur/objet/livre donc il va falloir ne pas tenir compte de tuto_ur/, pour ça, on va tout simplement définir une constante qui stocke le numéro de la première donnée que l'on peut extraire du tableau de l'URL :

Code : PHP
1
2
3
<?php
define('FIRST_DATA_URL', 1);
?>

N'oubliez pas que le premier élément d'un tableau n'est pas le 1 mais le 0. ;)

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

Code : PHP
1
2
3
<?php
$page = $adresse[FIRST_DATA_URL];
?>


Puis on va inclure cette page :

Code : PHP
1
2
3
4
5
<?php
if(file_exists('./'.$page.'.php') AND $page != 'index') {
	include('./'.$page.'.php');
}
?>


Je mets AND $page != 'index' afin de ne pas inclure à nouveau le fichier index.php, ce qui créerait une boucle infinie.


Vous pouvez ajouter ;) :

Code : PHP
1
2
3
4
5
6
<?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 :

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


Voila ce que j'obtiens :

Image utilisateur


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

Attention, ce script n'est pas sécurisé à 100%, c'est pourquoi je vous conseil la lecture de ce tutoriel afin de ne pas risquer de vous faire pirater votre site.

Les codes complets

Le fichier .htaccess



Code : Apache
1
ErrorDocument 404 /index.php


Le fichier index.php



Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?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



Code : PHP
1
2
3
<?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 :

Code : Autre
1
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 nom-de-l-article de la décoration, vous devrez faire :

Code : PHP
1
2
3
4
<?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 !

@+

PS : Je tiens à remercier les zCorrecteurs Guill@ume et Whitecoyote pour leur zCorrection rapide et efficace.

Image utilisateur

Informations sur le tutoriel

Retour en haut Retour en haut

Créé : Le 09/06/2008 à 18:10:07
Modifié : Le 22/08/2008 à 16:06:37
Avancement : 100%
Licence : Copie non autorisée

18 commentaires