Bonjour,
Est-il possible de récupérer l'adresse vers laquelle un visiteur se dirigeait et qui l'a amené vers une page d'erreur 404 ?
$_SERVER["HTTP_REFERER"] pointe vers la dernière page fonctionnelle (donc ne donne pas l'adresse qui a envoyé vers 404)
$_SERVER['REQUEST_URI'] pointe vers la page 404
Pour faire plus simple imaginons que l'admin se plante dans l'écriture d'un lien d'une page (imaginons que nous sommes sur index.php pour faire simple) :
<a href="coucou2.php">
au lieu de
<a href="coucou1.php">
et que du coup la page redirige vers erreur404.php (grâce au .htaccess)
$_SERVER["HTTP_REFERER"] donnera index.php
$_SERVER['REQUEST_URI'] donnera erreur404.php
?????? donnera coucou2.php
Je souhaite récupérer : coucou2.php (le lien incriminé qui a renvoyé vers erreur404 grâce au .htaccess)
Merci
besoin de ton htaccess
normalement t'as qlq chose du genre pour récupérer la redirection
ErrorDocument 404 /error/erreur404.php
et non
ErrorDocument 404 http://monsite.com/error/erreur404.php
un peu de doc :
http://httpd.apache.org/docs/current/mod/core.html#errordocument
ErrorDocument 404 /error/erreur404.php ne me récupèrerait pas le lien erronné mais redirigerait vers le fichier erreur404.php stocké dans un dossier error en cas d'erreur 404.
Idem pour la doc apache qui explique les différentes façon de faire des redirections mais n'explique pas comment récupérer le lien erroné qui a amené à une erreur 404.
Ou alors j'ai pas tout pigé
Passe en paramètre de ta page d'erreur la page qui a générée la 404.
Bonne idée !
Mais je fais ça comment du coup ?
Pour le htaccess je t'ai expliqué comme bien rediriger vers la page 404 avec une adresse RELATIVE , tu crées ce fichier avec le bon chemin que tu as indiqué dans le htaccess et dedans tu récupères l'url avec $_SERVER["REQUEST_URI"]
tiens moi au courant car tu n'as pas montré ton htaccess pour savoir si l'erreur venait de là
Ps: pour moi c'est expliqué dans le lien que je t'ai donné :
Notez que lorsque vous spécifiez une directive ErrorDocument pointant vers une URL distante (c'est à dire tout ce qui commence par le préfixe http), le serveur HTTP Apache va envoyer une redirection au client afin de lui indiquer où trouver le document, même dans le cas où ce document se trouve sur le serveur local. Ceci a de nombreuses conséquences dont la plus importante réside dans le fait que le client ne recevra pas le code d'erreur original, mais au contraire un code de statut de redirection. Ceci peut en retour semer la confusion chez les robots web et divers clients qui tentent de déterminer la validité d'une URL en examinant le code de statut. De plus, si vous utilisez une URL distante avec ErrorDocument 401, le client ne saura pas qu'il doit demander un mot de passe à l'utilisateur car il ne recevra pas le code de statut 401.
C'est pourquoi, si vous utilisez une directive ErrorDocument 401, elle devra faire référence à un document par le biais d'un chemin local.