Lors de la réalisation d’un site web, il peut être intéressant d’implémenter sa propre page d’erreur 404.

Lorsqu’un utilisateur demande une page inexistante sur un site, le serveur HTTP retourne une erreur 404 dont le message est page non trouvée. Soit pour un aspect esthétique, soit dans un but statistique[1], on peut être amené à créer sa page d’erreur HTTP personnalisée.

En prenant l’exemple de page écrites en PHP et exécutées sur le serveur HTTP Apache, il faut paramétrer le fichier .htaccess et d’écrire une page nommée erreur.php[2].

Il faut ajouter cette ligne dans le fichier .htaccess :

ErrorDocument 404 http://www.mondomaine.com/erreur.php?code=404

La page erreur.php doit contenir le code suivant[3] :

<html>
 	<head>
 		<title>Page d'erreur HTTP <?=code?></title>
 	</head>
 	<body>
 		Vous venez de rencontrer une erreur HTTP <?=code?> pour la page <?=$REQUEST_URI?>.
 	</body>
 </html>

Si l’utilisateur demande une page qui n’existe pas, il sera redirigé vers cette page. Par contre, la variable $REQUEST_URI retourne la valeur /erreur.php. Pour corriger ce problème et afficher correctement la page demandée et qui a provoqué l’erreur 404, il faut rectifier le fichier .htaccess ainsi :

ErrorDocument 404 /erreur.php?code=404

Maintenant la page d’erreur affiche correctement le nom de page source de l’erreur 404.

Pour finir, on peut estimer qu’il n’est pas très propre de véhiculer le code d’erreur HTTP dans l’URL de la page d’erreur. Heureusement, une variable PHP permet de connaître le code d’erreur HTTP. En reprenant l’exemple depuis le début, il faut implémenter la gestion des erreurs de la façon suivante.

Le fichier .htaccess se simplifie :

ErrorDocument 404 /erreur.php

Le fichier erreur.php doit être modifié pour utiliser la variable $_SERVER["REDIRECT_STATUS"] :

<html>
 	<head>
 		<title>Page d'erreur HTTP <?=$_SERVER["REDIRECT_STATUS"]?></title>
	</head>
<body>
Vous venez de rencontrer une erreur HTTP <?=$_SERVER["REDIRECT_STATUS"]?> pour la page <?=$REQUEST_URI?>.
</body>

</html>

Voici donc une méthode simple et efficace pour gérer les erreurs HTTP en PHP. Cet exemple n’est pas seulement valable pour les erreurs 404, mais pour toutes les erreurs HTTP telles que 401, 403, 500, …

Notes

[1] Ou pour surveiller ce qu’il se passe sur le site.

[2] Le nom choisi pour cette page est libre.

[3] Le code HTML est non-exhaustif car ce n’est pas le sujet de l’article.