Accueil > Tutoriels pour Webmasters > Créer une page d'erreur 404 personnalisée

Créer une page d'erreur 404 personnalisée

Sur un site web, l'erreur 404 s'affiche lorsqu'une page n'existe pas (ou n'existe plus à l'adresse indiquée). Par défaut, les navigateurs web affichent une page simple qui indique le code de l'erreur et donne des explications basiques sur cette erreur. Ce tutoriel explique comment créer une page d'erreur 404 personnalisée. Cela permet d'expliquer aux internautes pourquoi l'erreur est arrivée, de souligner que le site est soucieux de cette erreur et de rediriger le visiteur vers une autre partie du site (par exemple en donnant un lien vers la page d'accueil).

Prérequis

Le tutoriel requiert d'utiliser un serveur Apache. Bonne nouvelle, les serveurs Apache sont très couramment utilisés. Pour réussir ce tutoriel il faut aussi savoir comment envoyer des fichiers sur un espace d'hébergement web.

Créer la page d'erreur

Cette première partie concernant la création de la page d'erreur dépend des solutions utilisée pour créer le site (créé par un logiciel, créé à la main, ...). La page d'erreur de base peut contenir seulement du texte mais également l'un des éléments présentés ci-dessous.

Envoi d'un email au webmaster

Le code PHP ci-dessous est à insérer sur la page d'erreur pour envoyer un email donnant des informations au webmaster:

  1. <?php
  2. // Définition des variables
  3. $email_webmaster = 'contact@example.com';
  4.  
  5. // Information à personnaliser
  6. $email_sujet = 'Erreur 404 sur le site';
  7. $email_message = 'Bonjour. Une erreur 40 viens de se produire sur le site web que vous gérez.'."n";
  8. $email_message .= 'Voici des informations sur ce site:'."n";
  9. $email_message .= 'Heure: '.date("d/m/Y H:i")."n";
  10. $email_message .= 'Page concernée: '.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."n";
  11. $email_message .= 'Page précédente: '.$_SERVER['HTTP_REFERER'].' (si vide = connexion direct)'."n";
  12. $email_message .= 'Adresse IP du visiteur: '.$_SERVER['REMOTE_ADDR']."n";
  13. $email_message .= 'User agent: '.$_SERVER['HTTP_USER_AGENT'];
  14.  
  15. // Envoyer l'email
  16. @mail($email_webmaster, $email_sujet, $email_message, "FROM: Erreur_404");
  17. ?>

Attention: s'il y de nombreuses pages d'erreur, le webmaster risque d'être bombardé d'email.

Lien vers la page précédente

Si un internaute à cliqué sur un lien avant d'accéder à la page d'erreur, alors la variable PHP "$_SERVER['HTTP_REFERER']" possède l'adresse de la page précédente. Il est ainsi possible de fournir un lien pour que l'internaute retourne sur ses pas.

  1. <?php
  2. if (!empty($_SERVER['HTTP_REFERER'])) {
  3. echo '<p><a href="'.$_SERVER['HTTP_REFERER'].'">Retour page précédente</a></p>';
  4. }
  5. ?>

Fichier htaccess

Après avoir créé la page d'erreur, il faut rediriger chaque erreur 404 vers la page d'erreur tout juste créé. La première étape consiste à créer un fichier nommé ".htaccess" (fichier sans nom avec l'extension "htaccess"). Malheureusement avec le système d'exploitation Windows il n'est pas possible de nommé un fichier en commençant par un point. L'astuce consiste alors à créer un fichier nommé "htaccess" (sans point, sans extension) et à renommer le fichier plus tard lorsqu'il sera sur l'espace web.

Puis il faut ouvrir ce fichier avec un éditeur de texte simple (exemple: le bloc-notes). Et y écrire le code suivant:

  1. ErrorDocument 404 /erreur404.php

Information: ici l'erreur 404 est redirigée vers la page "erreur404.php", mais ceci est à personnaliser selon le nom qui est donné à la page d'erreur précédemment créé.

Pour finir, il faut envoyer le fichier htaccess sur l'espace d'hébergement et penser à renommer "htaccess" en ".htaccess" (le point peut être ajouté car le fichier n'est plus sur Windows).

Tester

Et voilà, il ne reste plus qu'à tester que tout fonctionne correctement. Pour cela, c'est simple, il suffit d'entrer une fausse URL et de voir le résultat. Si tout fonctionne correctement la page d'erreur personnalisée s'affichera au lieu d'un message d'erreur classique.