Simuler l'URL rewriting avec l'erreur 404

Formation

En Semi-présenciel Paris

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En semi-présentiel

  • Lieu

    Paris

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Les sites et dates disponibles

Lieu

Date de début

Paris ((75) Paris)
Voir plan
7 Cité Paradis, 75010

Date de début

Consulter

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

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 signifiant que le fichier auquel le visiteur a tenté d'accéder n'existe pas. ^^

Pour ce tutoriel, vous avez besoin d'un hébergeur qui accepte les fichiers .htaccess et les commandes du type :

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, 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

Donc, on aura besoin :

  • à la racine de votre site :

    • d'un fichier .htaccess,

    • d'un fichier index.php pour la redirection,

  • et où vous le souhaitez :

    • 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 :

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 :

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

Le système

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 /.

Je fais mes tests dans le dossier tuto_ur/ donc mes URL, une fois nettoyées, seront du type tuto_ur/objet/livre. Il va par conséquent 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 :

<?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 :

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

Puis on va inclure cette page :

<?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 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 :

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

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

Les codes completsLe fichier .htaccessErrorDocument 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 !

@+

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

  • #
Waouh !

Très heureux de voir que nos cours vous plaisent, déjà 3 pages lues aujourd'hui ! Vous pouvez continuer la lecture de nos cours en devenant un Roomie, un membre de la communauté d'OpenClassrooms. C'est gratuit !

Vous pourrez aussi suivre votre avancement dans le cours, faire les exercices et discuter avec les autres Roomies.

S'inscrire Se connecter
  • Thématiques du cours : PHP Web

Chaque cours est créé par un professeur ou un expert dans le domaine. Il est composé d'une ou plusieurs parties et peut comporter du texte, des images (schéma, illustration) et des vidéos. Chaque partie d'un cours certifiant est ponctuée d'exercices de 2 types : Des quiz corrigés automatiquement Des devoirs libres (exemple : créer un site web avec des consignes précises). Ces devoirs sont évalués par les pairs. Chaque devoir est corrigé 3 fois par 3 autres élèves, dans un processus en double aveugle, selon un barème fixé par le professeur. La note finale est la moyenne des 3 notes reçues sur le devoir. 50% des devoirs corrigés par les pairs obtiennent quasiment les 3 mêmes notes, avec une variance inférieure à 1. La recherche académique montre d'ailleurs que l'évaluation par les pairs peut être aussi précise que celle des professeurs.

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Simuler l'URL rewriting avec l'erreur 404

Prix sur demande