TROUVER LA PAGE D'ORIGINE D'UNE ERREUR 404

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics


malango
WRInaute discret
WRInaute discret
 
Messages: 89
Inscription: 14 Oct 2003

TROUVER LA PAGE D'ORIGINE D'UNE ERREUR 404

Message le Sam Fév 21, 2004 17:43

Je suppose que je suis en train de réinventer l'eau chaude. Alors demander si klkun a déjà la solution, qui existe forcément...
Voilà mon problème : à force de bidouiller le site dans tous les sens, de trouver toujours LA solution.... bref, j'en arrive à avoir une page d'erreur qui reçoit autant de visiteurs que toutes les autres pages... C'est un peu con! J'ai tenté de me faire envoyer un mail à chaque erreur 404 en m'envoyant le nom de la pga d'origine, celle qui contient un lien qui renvoit une erreur 404. Que nenni! Pipo! pas de referrer dans le mail.
Comment récupérer le nom de la page d'origine ou quelle est la meilleure solution pour recevoir ce mail et surtout LE NOM DE LA PAGE QUI M.....
Certains hébergeurs proposent cette fonction... Pas le mien!
C'est grave, docteur?


WebRankInfo
Administrateur du site
Administrateur du site
 
Messages: 19422
Inscription: 19 Avr 2002

Message le Sam Fév 21, 2004 18:28

dis-nous ce que tu as mis dans ton .htaccess pour gérer la page 404, ainsi que les lignes de code utilisées pour t'envoyer le referer par email...


Remi L.
WRInaute passionné
WRInaute passionné
 
Messages: 1063
Inscription: 6 Sep 2003

Message le Sam Fév 21, 2004 19:23

Plutôt que de t'envoyer un mail à chaque erreur (ce que je trouve assez démesuré...), tu peux stocker les info dans un fichier.
En PHP, tu auras l'url demandée dans la variable $_SERVER["REQUEST_URI"].

Tu peux même te mettre toutes les autres infos (time, referer, user-agent, etc...), des logs d'erreur en quelque sorte...
L'essayer c'est l'adopter ;)


malango
WRInaute discret
WRInaute discret
 
Messages: 89
Inscription: 14 Oct 2003

Message le Dim Fév 22, 2004 5:59

Remi L. a écrit:Plutôt que de t'envoyer un mail à chaque erreur (ce que je trouve assez démesuré...), tu peux stocker les info dans un fichier.
En PHP, tu auras l'url demandée dans la variable $_SERVER["REQUEST_URI"].

Tu peux même te mettre toutes les autres infos (time, referer, user-agent, etc...), des logs d'erreur en quelque sorte...
L'essayer c'est l'adopter ;)


Le pblme c'est que si je fais une redirection vers une page "erreur.php", l'URI devient tout logiquement www.tartempion/erreur.php....

Y a-t-il un moyen de récupérer ce REQUEST_URI sous une forme quelconque dans le HTACCESS qui permettrait par exemple de faire une redirection genre :

erreur.php?page=resultat_fontion_htaccess?


malango
WRInaute discret
WRInaute discret
 
Messages: 89
Inscription: 14 Oct 2003

Message le Dim Fév 22, 2004 7:23

J'ai cherché un peu partout une doc sur l'utilisaion des variables dans le HTACCESS... Rien! A part l'incourtournable article de Dan Hezl qu'on retrouve sur 2165487 sites (au moins...) rien d'autre!
Pourtant elles existent et je ne dois pas être loin de la solution...
dernier esai infructueux en date :
dans le HTACCESS :

ErrorDocument 404 http://w*w.malango.net/erreur.php?page= %{HTTP_REFERER}

ça marche pas mais c'est dans l'écriture de la variable HTTP_REFERER que ça m...

Est-il possible de trouver une doc sur les variables utilisées dans le HTACCESS et la manière de les utiliser????

nikoshr
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 320
Inscription: 10 Juil 2003

Message le Dim Fév 22, 2004 9:34

Oui, oui, pas de problème : la doc Apache, la liste des directives, celles valides pour un .htaccess ont un h dans la colonne de droite.

Code: Tout sélectionner
ErrorDocument 404 /erreur.php

et dans erreur.php tu récupères les variables du serveur et de la requête, voir les variables prédéfinies de PHP

Dans la directive ErrorDocument, utiliser un nom de domaine complet force une redirection. La syntaxe ci-dessus fait appel à un fichier local et préserve le code de retour (404).


malango
WRInaute discret
WRInaute discret
 
Messages: 89
Inscription: 14 Oct 2003

Message le Dim Fév 22, 2004 14:11

nikoshr a écrit:Oui, oui, pas de problème : la doc Apache, la liste des directives, celles valides pour un .htaccess ont un h dans la colonne de droite.

Code: Tout sélectionner
ErrorDocument 404 /erreur.php

et dans erreur.php tu récupères les variables du serveur et de la requête, voir les variables prédéfinies de PHP

Dans la directive ErrorDocument, utiliser un nom de domaine complet force une redirection. La syntaxe ci-dessus fait appel à un fichier local et préserve le code de retour (404).


COOL, on avance! En fait, c'est bien le chemin absolu qui foutait la m...
Par contre, quand l'erreur vient d'une page du site, le $_SERVER['HTTP_REFERRER'] ne renvoit aucune valeur... J'attends de voir ce qui se passe quand le lien vient de l'extérieur, mais à priori ça marche : j'utilise ça pour mon compteur...


Remi L.
WRInaute passionné
WRInaute passionné
 
Messages: 1063
Inscription: 6 Sep 2003

Message le Dim Fév 22, 2004 14:35

:? C'est pas le referer qu'il te faut... c'est request_uri...
Tiens, voilà en gros le code que j'utilise depuis un certain temps pour me créer des logs au même format que ceux d'Apache avec les erreurs 404.
Ce bout de PHP est placé dans mon erreur404.php mis en place grâce au htaccess, tel que l'a décrit Nikoshr
Code: Tout sélectionner
<?php
$logfile = "../erreurs404.log";
$mydomain = "www.mondomaine.com";
$timezone="+0100";
$MonthLib = array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
$lt= localtime(time());
$time= sprintf("[%02d/%s/%04d:%02d:%02d:%02d $timezone]",$lt[3],$MonthLib[$lt[4]],$lt[5]+1900,$lt[2],$lt[1],$lt[0]);
$refer=$_SERVER["HTTP_REFERER"];
$fd=fopen($logfile,"a");
if($fd){
  flock($fd,LOCK_EX);
   fputs($fd,$_SERVER["REMOTE_ADDR"]." $mydomain - $time \"GET ".$_SERVER["REQUEST_URI"]." ".$_SERVER["SERVER_PROTOCOL"]."\" 404 -"." \"$refer\" \"".$_SERVER["HTTP_USER_AGENT"]."\"\n");
   flock($fd,LOCK_UN);
   fclose($fd);
}
?>

Le fichier de log est placé au dessus de ma zone accessible par http, pour que je sois le seul à pouvoir le lire.
Je récupère ce fichier assez régulièrement et cela me suffit à cerner les problèmes, tout en m'évitant d'extirper les erreurs 404 de mes fichiers ordinaires de logs.
Voili voilou...


malango
WRInaute discret
WRInaute discret
 
Messages: 89
Inscription: 14 Oct 2003

Message le Dim Fév 22, 2004 16:24

Remi L. a écrit::? C'est pas le referer qu'il te faut... c'est request_uri...
Tiens, voilà en gros le code que j'utilise depuis un certain temps pour me créer des logs au même format que ceux d'Apache avec les erreurs 404.
Ce bout de PHP est placé dans mon erreur404.php mis en place grâce au htaccess, tel que l'a décrit Nikoshr
Code: Tout sélectionner
<?php
$logfile = "../erreurs404.log";
$mydomain = "www.mondomaine.com";
$timezone="+0100";
$MonthLib = array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
$lt= localtime(time());
$time= sprintf("[%02d/%s/%04d:%02d:%02d:%02d $timezone]",$lt[3],$MonthLib[$lt[4]],$lt[5]+1900,$lt[2],$lt[1],$lt[0]);
$refer=$_SERVER["HTTP_REFERER"];
$fd=fopen($logfile,"a");
if($fd){
  flock($fd,LOCK_EX);
   fputs($fd,$_SERVER["REMOTE_ADDR"]." $mydomain - $time "GET ".$_SERVER["REQUEST_URI"]." ".$_SERVER["SERVER_PROTOCOL"]."" 404 -"." "$refer" "".$_SERVER["HTTP_USER_AGENT"].""\n");
   flock($fd,LOCK_UN);
   fclose($fd);
}
?>

Le fichier de log est placé au dessus de ma zone accessible par http, pour que je sois le seul à pouvoir le lire.
Je récupère ce fichier assez régulièrement et cela me suffit à cerner les problèmes, tout en m'évitant d'extirper les erreurs 404 de mes fichiers ordinaires de logs.
Voili voilou...


L'URI, je la récupère bien, mais ce que je veux savoir c'est sur quelle page il y a le lien mort... que ce soit en interne ou en externe (histoire de prévenir le site ou de mettre une redirection...)
J'essaie ta moulinette et je te dis quoi
Merci


malango
WRInaute discret
WRInaute discret
 
Messages: 89
Inscription: 14 Oct 2003

Message le Dim Fév 22, 2004 16:31

podzob!!!
Pas de referer!
Ta moulinette marche nickel mais j'ai toujours pas la page où se trouve le lien mort...

Davidc
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 8
Inscription: 17 Fév 2004

Message le Dim Fév 22, 2004 22:53

heu... j'ai peut-être mal compris un truc mais j'ai eu l'impression qu'il te disait de ne plus regarder le REFERER mais plutôt le REQUEST_URI
(qu'il récupère également au passage)

normalement si le htaccess fait une réécriture locale (sans le http:// ... )
et que tu prends le REQUEST_URI tu as ce que tu cherchais.

c'est une solution de ce type qu'il te faudra utiliser, tu peux donc tenter pourquoi pas d'autres variables, mais l'une de ces deux là est sensée convenir

THE_REQUEST
The full HTTP request line sent by the browser to the server (e.g., "GET / index.html HTTP/1.1"). This does not include any additional headers sent by the browser.

REQUEST_URI
The resource requested in the HTTP request line. (In the example above, this would be "/index.html".)


mais ceci dit la doc d'Apache cite aussi des usages comme ceux auxquels tu penses:
RewriteRule ^(.+) %{HTTP_HOST}$1
par exemple...

donc en utilisant les variables qui nous intéressent ici, il doit y avoir moyen de faire une ré-écriture (sans redirection) pour avoir du
.....php?uri=%{REQUEST_URI}

si ni l'un ni l'autre ne fonctionne ça sera à en perdre son latin.

Davidc
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 8
Inscription: 17 Fév 2004

Message le Dim Fév 22, 2004 23:04

Trouvé sur un autre forum, ça pourrait t'aider:

the $_SERVER['HTTP_REFERER'] is empty in a custom error page. But I did some research and discovered that this info is available via getenv('HTTP_REFERER').

Maybe this may help other people with the same problem.


note que pour certains ça fonctionne très bien de la première façon, et pour lui seulement de cette façon là, peut-être des histoires de configuration de php ou du derveur ?


essaye toujours... on ne sait jamais. Si ça se trouve tu peux l'avoir quand même ton referer... Et puis sinon (puisque le referer n'est pas une info fiable: parfois masquée par la config parfois non émis par le navigateur) tu pourras toujours essayer également:
$_SERVER['remote_host'] pour voir éventuellement si ça vient toujorus du même endroit (si oui, l'erreur ne vient peut-être pas de toi mais d'un favori mal mémorisé ?)

enfin bon... voilà les idées que j'ai ... A+


Remi L.
WRInaute passionné
WRInaute passionné
 
Messages: 1063
Inscription: 6 Sep 2003

Message le Dim Fév 22, 2004 23:24

Oui, cela pourrait expliquer son problème car pour ma part le 'referer' est parfaitement renseigné.


malango
WRInaute discret
WRInaute discret
 
Messages: 89
Inscription: 14 Oct 2003

Message le Lun Fév 23, 2004 5:38

ÇA MARCHE !!!

On récapitule?

dans le htaccess :
ErrorDocument 404 /erreur.php
avec une adresse RELATIVE (merci nikoshr!)

dans la page d'erreur :

$prov = getenv('HTTP_REFERER');
$uri = $_SERVER["REQUEST_URI"];
avec utilisation de la fonction getenv() (merci Davidc!)


iubito
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 33
Inscription: 25 Avr 2004

Message le Mar Fév 22, 2005 23:40

Moi je viens de me prendre la tête avec ça sur un site chez free.

Ma solution :

.htaccess :
Code: Tout sélectionner
ErrorDocument 404 /404.php


/404.php :
Code: Tout sélectionner
<?php

//echo 'REFERER = '.getenv('HTTP_REFERER');
//echo '<br />REQUEST_URI = '.getenv("REQUEST_URI");

//Enlève le / du début
$title = ereg_replace("^/", "", getenv("REQUEST_URI"));
//die($title);

header('HTTP/1.0 200 OK');
header("Location: index.php?title='.$title);

?>


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

  • Analyse de l'entête HTTP
    Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.
  • Trouver la position d'un site dans Google
    Cet outil vous permet de vérifier si une ou plusieurs page(s) de votre site arrive(nt) dans les premiers résultats de Google, pour certains mots-clés recherchés.
  • Trouver la position d'un site dans Yahoo
    Cet outil vous permet de vérifier si une ou plusieurs page(s) de votre site arrive(nt) dans les premiers résultats de Yahoo, pour certains mots-clés recherchés.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités