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.
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 : Apache1 | 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 : Autre1
| http://www.monsite.com/objet.php?obj=livre |
... deviendra...
Code : Autre1
| http://www.monsite.com/objet-livre.html |
... ou encore...
Code : Autre1
| 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.
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
Vous verrez ensuite pourquoi.
Le fichier .htaccess
Créez maintenant un fichier
.htaccess dans lequel vous mettrez ceci :
Code : Apache1 | 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 : Autre1
| 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 :

Allez hop, on passe à la réalisation du système.
Alors, ici, mes URL seront du type :
Code : Autre1
| 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 : PHP1
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 / .
On va donc récupérer le nom de la page :
Code : PHP1
2
3 | <?php
$page = $adresse[FIRST_DATA_URL];
?>
|
Puis on va inclure cette page :
Code : PHP1
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 : PHP1
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 : PHP1
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 :
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.
Une fois que vous avez compris le principe, vous pouvez très bien créer des URL du type :
Code : Autre1
| 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 : PHP1
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.
