Page 404 personnalisée

Comment mettre en place une gestion personnalisée des erreurs 404, 500, 403 avec Joomla 1.5

Petit rappel : Joomla! 1.5 utilise le fichier templates/system/error.php qui sert à afficher une page d’erreur par défaut, et il est possible de personnalisé cette page en ajoutant un fichier error.php dans le dossier de votre template, mais seule les erreurs 404 (not found),403 (forbidden) et éventuellement 500 (internal server error) seront personnalisables.

Si vous souhaitez offrir à vos visiteurs une page d’erreur personnalisé aussi bien en therme de message qu’en therme de look vous pouvez :

  • Optez pour l’utilisation de composant ou module spécifique
  • Configurer votre composant SEF si vous avez décidé d’en utiliser un pour votre site
  • Ajouter un fichier « error.php » dans le dossier de votre templates (/templates/montemplate/error.php)

La méthode décrite permet de personnalisé l’intégralité des pages d’erreur mais nous couvrirons dans cet article que les erreurs HTTP 403 (forbidden), 404 (page not found) et 500 (internal server error) nous étudierons dans un autre article (a venir) la méthode pour recevoir par mail les tentatives de hacking ou traiter les autres types d’erreurs (401,402,501 …)

Pour eviter que joomla ne propose l’accès aux articles de traitement des erreurs depuis un lien de menu qui afficherait des articles de même niveau nous allons ajouter une section et une catégorie.

1)° Via l’administrator menu « Contenu->Gestion des sections » ajouter la section « gestion-system ».ajouter-une-section

2)° Via l’administrator menu « Contenu->Gestion des catégories » ajouter la catégorie « erreur-document » et rattachez cette catégorie à la section « gestion-system ».
ajouter-une-categorie

3°) Ajouter un fichier error.php dans le dossier de votre template.
Ce fichier aura en charge de vous envoyer un mail d’erreur et de rediriger vers l’article correspondant à l’erreur rencontrée.

Utilisez l’éditer de texte de votre choix et copier le contenu suivant dans ce fichier
[sourcecode language= »php »]
defined(‘_JEXEC’) or die(‘Restricted access’);

$redirect_url = "http://".$_SERVER[‘HTTP_HOST’].$this->baseurl.DS;

function erreurparMail($page) {
$to="VOTREADRESSEMAIL";
$sujet="ERREUR ".$page->error->code." sur VOTRE SITE.";
if(empty($_SERVER[‘HTTP_REFERER’])) {
$provenance="Pas de lien intermédiaire, connexion directe";
} else {
$provenance=$_SERVER[‘HTTP_REFERER’];
}
$message = "\nUne erreur ".$page->error->code." s’est produite sur le site ".$_SERVER[‘HTTP_HOST’].
".\n\nProvenance : ".$provenance.
"\nNavigateur : ".$_SERVER[‘HTTP_USER_AGENT’]."\nAdresse IP : http://".$_SERVER[‘REMOTE_ADDR’]."\nNom de domaine : ".gethostbyaddr($_SERVER[‘REMOTE_ADDR’]).
"\n\nPage : ".$_SERVER[‘REQUEST_URI’];
@mail($to,$sujet,$message,"FROM:Erreur_".$page->error->code);
}

if (!headers_sent()) {
switch ($this->error->code) {
case 404 :
erreurparMail($this);
header(‘HTTP/1.1 404 Not Found’);
header(‘Status: 404 Not Found’);
//echo file_get_contents($redirect_url.’404.html’);
//SI vous n’avez pas créer de menu "inutilisé" vous permettant d’avoir des urls sef pour vos pages d’erreur utilisez des liens comme ci-dessous.
echo file_get_contents($redirect_url.’index.php?option=com_content&view=article&id=19′);
exit();
case 403 :
erreurparMail($this);
header(‘HTTP/1.1 403 Forbidden’);
header(‘Status: 403 Forbidden’);
//echo file_get_contents($redirect_url.’403.html’);
//SI vous n’avez pas créer de menu "inutilisé" vous permettant d’avoir des urls sef pour vos pages d’erreur utilisez des liens comme ci-dessous.
echo file_get_contents($redirect_url.’index.php?option=com_content&view=article&id=45′);
exit();
default:
erreurparMail($this);
header(‘HTTP/1.1 500 Internal Server Error’);
header(‘Status: 500 Internal Server Error’);
//echo file_get_contents($redirect_url.’500.html’);
//SI vous n’avez pas créer de menu "inutilisé" vous permettant d’avoir des urls sef pour vos pages d’erreur utilisez des liens comme ci-dessous.
echo file_get_contents($redirect_url.’index.php?option=com_content&view=article&id=46′);
exit();
}
} else {

AJOUTER ICI UNE LE CONTENU HTML DE VOTRE CHOIX IL SERA APPELÉ QU’EN CAS OU UN CONTENU

AURA DÉJÀ ÉTÉ RENVOYÉ PAR JOOMLA (on va dire jamais même si il faut jamais le dire 😉 )

}
[/sourcecode]

Personnalisation des erreurs 404

3°) Réalisé un nouvel article correspondant à l’article qui sera affiché pour les erreurs 404 et classer cet article dans la section « gestion-system » et la catégorie « erreur-document ».
Pour le contenu libre à vous de mettre le message qui vous plait mais pour le titre et l’alias de l’article indiquez le code d’erreur concerné ici 404.
titre-et-allias-article404
Faite attention aux paramètres avancés de votre article et reportez vous à la copie de configuration ci-dessous afin d’éviter l’affichage d’information inutiles.
parametres-avances-article-404
Enregistrer votre article et notez son id (dernière colonne de gauche dans la copie ci-dessous) il servira pour l’étape suivante.id-de-votre-article

4°) Modifiez le fichier .htaccess à la racine de votre installation joomla.
Ajouter ceci à la fin de votre fichier « ErrorDocument 404 /index.php?option=com_content&view=article&id=19 ».