Page 404 personalisée

Envoi de mail

logo cssVotre page d'erreur 404 est terne et vous fait perdre des visiteurs qui ont fait une fautes de frappe ou ont été mal dirigés.
Pourquoi ne pas mettre en place une page d'erreur personnalisée :)
Une page qui pourquoi pas vous envoi un mail avec la page incriminée et la provenance grâce à php.Voici donc 2 exemples un simple et un fonctionnant sur les hébergement de type FREE et ONLINE.NET qui vont vous guider .

Tout le Wifi chez Wifi-Highpower: cartes, antennes, routeurs, Alfa Network, Awus036H...

1:// Le htaccess:

La première chose à faire est de rediriger les pages d'erreurs vers votre page d'erreur perso. Ici 404.php

Pour ce faire placer un fichier nommé .htaccess à la racine de votre site et à l'interieur ajouter la ligne:

ErrorDocument  404  /404.php

2:// La page d'erreur 404 en php:


Pour que l'on soit informé de la provenance et de la page d'erreur, on utilise php.

On crée donc une page php que l'on place à la racine du site également.

Voici le code à insérer:

ERREUR 404
Un e-mail va être envoyé au webmaster du site pour qu'il corrige le problème.
<?
$to="votre_mail@votre_site.com";
$sujet="ERREUR 404 sur VOTRE SITE.";
if(empty($HTTP_REFERER)) { $provenance="Pas de lien intermédiaire, connexion directe"; } else { $provenance=$HTTP_REFERER; }
$message="\nUne erreur 404 s'est produite sur le site VOTRE SITE.\n\nProvenance : ".$provenance.";
Page : ".$SCRIPT_URI."\nNavigateur : $HTTP_USER_AGENT\nAdresse IP : http://$REMOTE_ADDR\nNom de domaine : ".gethostbyaddr($REMOTE_ADDR)."\n";
@mail($to,$sujet,$message,"FROM:Erreur404");
?>

Petite explication:

To est le destinataire du mail, sujet ... le sujet du mail :D.
Ensuite si le referant n'est pas null on note referrant=provenance.
Enfin on construit le message, la variable $SCRIPT_URI represente l'url de la page ou est executé le script.
Ensuite on recupère l'ip et l'host (wanadoo proxad ..) et on envoi le mail.

Le seul soucis est que ce script de mail pour les erreur 404 ne fonctionne pas sur free, ni sur online.net entre autre.
Bcp croient que c'est du à l'utilisation de la fonction mail mais pas du tout !!! C'est plus du coté de la variablede referer.
On va donc developper un script spécial pour ces hebergements.

3:// Mail d'erreur 404 sur free et online.net :

Tout le Wifi chez Wifi-Highpower: cartes, antennes, routeurs, Alfa Network, Awus036H...

La technique va être l'utilisation de javascript pour récupérer l'url de la page et la transmetre par php comme variable en rapellant le script qui va nous fournir le referant tant attendu.

Seul bémol il faudra pour avoir le réferrant que l'utilisateur ai javascipt d'activé.
Pour les non js on mettra en place encor une petite technique... suivez le guide:

La page php devient ceci:

<?
if(isset($_GET['addr'])){
    $adresse=$_GET['addr'];
    $to="[email protected]";
    $page=$_SERVER['HTTP_REFERER'] ;
    $sujet="ERREUR 404 PAGE ".$page."";
    $message="\nErreur 404 sur\nPage : ".$page.";
    Provenance : ".$adresse."
    Navigateur : $HTTP_USER_AGENT
    Adresse IP : http://$REMOTE_ADDR
    Nom de domaine : ".gethostbyaddr($REMOTE_ADDR)."\n";
    @mail($to,$sujet,$message,"FROM:Erreur404");
    exit();
}
?>

Et on place ceci également sur la page:

<script language="javascript1.2">
var provenance = document.referrer;
document.write('<img heigth="0px" width="0px" src="/404.php?addr=' + provenance + '">');
</script>

La différence va être que le js va appeller la page 404.php qui contient le code plus haut et js va permettre de choper le referant car il recupère l'adresse de la page incriminé (celle ou la 404 a réelement lieu) puis l'envoi dans un get à 404.php.

Ensuite la page 404.php est apellée avec en paramètre la provenance et va pouvoir nous le donner et l'envoyer par mail ;).

Le soucis va être pour ceux qui n'ont pas activé javascript.
On peut choisir de les ignorer, ils ne nous enverrons pas de mail :)
Le hic: les moteurs de recherches n'ont pas js ... donc s'ils ont des 404 chez vous vous ne le saurez pas.
Par contre, dans tout les cas vous ne connaitrez pas la page incriminée (ou alor dites moi comments, je cherche encor :D).

Pour régler le problème on va donc modifier un peu le php.
On rajoute une condition else :
même si on a pas de get avec le referrant on envoi qd meme le mail 404

Par contre il ne faut pas envoyer 2 mails pour ceux qui ont javascript activé.
Donc on pose la variable $fais=1 en plus dans le else. Et on inclu le js que si $fais est différent de 1.

Ce qui nous donne ceci à rajouter après le if:

else {$to="[email protected]";
    $sujet="ERREUR 404";
    $message="\nErreur 404;
    Provenance : 'ya pas de js'
    Navigateur : $HTTP_USER_AGENT
    Adresse IP : http://$REMOTE_ADDR
    Nom de domaine : ".gethostbyaddr($REMOTE_ADDR)."\n";
    @mail($to,$sujet,$message,"FROM:Erreur404");
    $fais=1;
} ?>


et cette ligne plus loin:

<? if ($fais!=1) { include (js404.php);} ?>


Et l'on crée le fichier js404.php dans lequel on recopie exactement le même code js que dans version simple pour ensuite le placer dans le même dossier que 404.php

Et voila. Je vous conseil quand même d'ignorer ceux qui n'ont pas le js sinon votre boite mail risque d'exploser si comme moi des :/#"#[)*$"*$ postent des liens vers votre site sur des forums... en se plantant dans l'url ...
Pourtant ya un lien tout fais en bas de chaque tuto ... sic

Fichiers :

La page 404 simple
La page 404 spécialisée free et online.net la seconde versions avec la gestion des non js la page externe js

Il faut renommer les txt en php ;-)

Cette methode, de rediriger les erreurs 404 n'est pas compatible avec la vérification de sitemap de google donc désactivez la pour la vérification :).

Merci à Xorax qui m'a aider pour le tuto.



© Copyright 2005-2006 Tuto-fr.com par Billyboylindien
Déclaré à la cnil: Dossier nÝ 1142196
Rc v2.0