Page 404 personnalisée

Une erreur “404 not found” est délivrée par un serveur quand on lui demande une page et qu'il ne la trouve pas. Généralement, ce message n'est pas mis en forme, ou pire, contient des lignes d'erreur qui peuvent repousser le visiteur de votre site.

Il est donc intéressant de se préparer des pages d'erreur personnalisées, pour parer à toute situation.

Le fichier .htaccess placé à la racine du répertoire de votre site permet de donner des instructions au serveur. Ce fichier offre de très nombreuses possibilités : aujourd'hui nous verrons comment simplement adresser ses propres pages 404.

C'est très simple. Que vous y accédiez par SSH ou par FTP (vérifiez que votre logiciel affiche bien les fichiers cachés), il suffit d'éditer le fichier .htaccess se trouvant à la racine du site, ou bien de le créer (c'est un simple fichier texte).

Si le fichier contient déjà des instructions, attention à ne pas les modifier ou les supprimer. Ajoutez simplement une ligne vide à la fin puis remplissez avec ceci :

ErrorDocument 404 /404.html

Cela indique au serveur qu'au lieu de délivrer une erreur 404 de base, il devra afficher la page 404.html se trouvant à la racine (“/”).

Vous pouvez faire la même chose pour les autres messages d'erreur : 403 Forbidden, 500 Internal server error, etc.

Créez simplement les pages équivalentes (403.html, 500.html, etc), placez les dans un répertoire nommé “Errors” à la racine du site, et ajoutez ceci dans le fichier .htaccess :

ErrorDocument 403 /403.html
ErrorDocument 500 /500.html

Voici la liste des erreurs possibles :

400 Bad request
401 Login error
403 Forbidden
404 Missing
405 Method not allowed
408 Request timeout
414 URL too long
500 Internal server error
502 Bad gateway
504 Gateway timeout

Autre solution

Au lieu de réaliser des pages différentes pour chaque erreur, peut-être préférerez-vous afficher les messages système mais en choisissant tout de même le texte qui apparaîtra.

Créez une page error.php à la racine du site et copiez-y ceci :

<?php
$status=$_SERVER['REDIRECT_STATUS'];
$codes=array(
      400 => array('400 Bad Request', 'The request cannot be fulfilled due to bad syntax.'),
      401 => array('401 Login Error', 'It appears that the password and/or user-name you entered was incorrect.'),
      403 => array('403 Forbidden', 'Sorry, employees and staff only.'),
      404 => array('404 Missing', 'We\'re sorry, but the page you\'re looking for is missing, hiding, or maybe it moved somewhere else and forgot to tell you.'),
      405 => array('405 Method Not Allowed', 'The method specified in the Request-Line is not allowed for the specified resource.'),
      408 => array('408 Request Timeout', 'Your browser failed to send a request in the time allowed by the server.'),
      414 => array('414 URL To Long', 'The URL you entered is longer than the maximum length.'),
      500 => array('500 Internal Server Error', 'The request was unsuccessful due to an unexpected condition encountered by the server.'),
      502 => array('502 Bad Gateway', 'The server received an invalid response from the upstream server while trying to fulfill the request.'),
      504 => array('504 Gateway Timeout', 'The upstream server failed to send a request in the time allowed by the server.'),
);
$errortitle=$codes[$status][0];
$message=$codes[$status][1];
if($errortitle==false){
       $errortitle="Unknown Error";
       $message="An unknown error has occurred."
}
?>
<!doctype html>
<html>
<head>
<title><?php echo("$errortitle");?></title>
<meta charset="utf-8">
</head>
<body>
<!-- Insert headers here. -->
<?php
echo('<h1>'.$errortitle.'</h1>');
echo('<p>'.$message.'</p>');
?>
<!-- Insert footers here. -->
</body>
</html>

puis dans le fichier .htaccess :

ErrorDocument 400 /error.php?q=400
ErrorDocument 401 /error.php?q=401
ErrorDocument 403 /error.php?q=403
ErrorDocument 404 /error.php?q=404
ErrorDocument 405 /error.php?q=405
ErrorDocument 408 /error.php?q=408
ErrorDocument 414 /error.php?q=414
ErrorDocument 500 /error.php?q=500
ErrorDocument 502 /error.php?q=502
ErrorDocument 504 /error.php?q=504

A chaque erreur, le serveur consultera le fichier .htaccess puis exécutera la page error.php avec le paramètre correspondant.

Auteur: Eric Dejonckheere