Peut on detecter la redirection 301 ?

WRInaute discret
Bonjour,

Est ce qu'il y a une façon pour détecter une redirection 301 vers ma page

je veux paramétrer ma page pour qu'elle affiche un message lorsque le visiteur y est tombé à partir d'une redirection 301

merci d'avance
 
WRInaute passionné
// Fonction récupération code statut HTTP
function getHTTPHeaders($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1); // Inclure l'entête HTTP
curl_setopt($ch, CURLOPT_NOBODY, 1); // Ne pas télécharger le corps
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Ne pas afficher, mais retourner le résultat de curl_exec
return split("\n",curl_exec($ch));
}
 
WRInaute accro
jboor a dit:
je veux paramétrer ma page pour qu'elle affiche un message lorsque le visiteur y est tombé à partir d'une redirection 301
Il n'existe aucun moyen pour savoir si ton visiteur arrive via une redirection, que ce soit une 301 ou une autre (sauf évidemment si c'est ton propre serveur qui fait la redirection).

La raison en est que toutes les redirections sont traitées par le navigateur, même celles que certains appellent "redirections serveur".

Il n'est même pas possible d'utiliser le status HTTP, ni le referrer. Par exemple, si j'ai la pageA avec un lien vers URL1 qui fait une redirection vers URL2, alors on aura :
1. sur le serveur où se trouve URL1:
- status HTTP: 301
- referrer : pageA
2. sur le serveur où se trouve URL2:
- status HTTP: 200
- referrer : pageA

Finalement si tu veux absolument identifier les 301, il faudrait crawler toutes les pages-referrers et analyser le code pour voir s'il renvoie directement vers ta page ou via une redirection et puis voir si cette redirection est une 301. Ce serait plutôt "sportif"... :wink: Ce serait seulement à partir de cette liste de referrers que tu pourrais alors décider du contenu à afficher...

Jean-Luc
 
WRInaute passionné
Essaye le code que je t'ai filé qui fonctionne très bien vu que je m'en sert pour contrôler les sites qui s'inscrivent sur mon annuaire, ainsi, je n'autorise que les 200 et 301.

Je ne sais pas ou vous cherchez qu'on ne peut pas savoir le code http d'une URL...
 
WRInaute accro
Savoir si un lien sur ton site fait une redirection est une chose; savoir si un visiteur qui arrive sur ton site a suivi une redirection est autre chose. 8)

Jean-Luc
 
WRInaute passionné
Mais dans ce cas là, il est facile de récupéré le referer et de regarder ce qu'il se passe.

Example, l'annuaire -http://www.aixplorer.com/

envoi un visiteur vers ton site en passant par l'url -http://www.aixplorer.com/goto.php?id=230

Pour toi, le referer, c'est -http://www.aixplorer.com/goto.php?id=230, et en test http, iol donne 302 :wink:
 
WRInaute discret
ça c'est le plus simple. mais la redirection 301 et encore avec .htaccess n'est pas détectable à mon avis
 
WRInaute accro
Koxin-L a dit:
Mais dans ce cas là, il est facile de récupéré le referer et de regarder ce qu'il se passe.
Facile ? facile ?

Pour chaque referrer, il faut examiner la page, trouver le lien qui lie vers ta page et puis tester s'il est direct ou s'il fait une redirection et laquelle. Oui, c'est faisable...

Jean-Luc
 
Nouveau WRInaute
Désolé, je déterre ce sujet auquel j'aimerais trouver une solution.

Au final, on peut donc récupérer le referer et analyser son status ?

Si il y a redirection, le referer devrait alors être la page de redirection, et il n'y aurait plus qu'a analyser les entêtes de cette page, avec curl par exemple ?

Si certains veulent bien me dire si j'ai bon ou non, ca serait cool ;)
 
WRInaute accro
Bonjour,

Petit déterrage de topic qui résume bien mon besoin.
jboor a dit:
je veux paramétrer ma page pour qu'elle affiche un message lorsque le visiteur y est tombé à partir d'une redirection 301

jeanluc a dit:
Il n'existe aucun moyen pour savoir si ton visiteur arrive via une redirection, que ce soit une 301 ou une autre (sauf évidemment si c'est ton propre serveur qui fait la redirection).
La redirection est effectuée par mon propre serveur et la fonction présentée par Koxin-L me semble toute indiquée.
Koxin-L a dit:
// Fonction récupération code statut HTTP
function getHTTPHeaders($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1); // Inclure l'entête HTTP
curl_setopt($ch, CURLOPT_NOBODY, 1); // Ne pas télécharger le corps
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Ne pas afficher, mais retourner le résultat de curl_exec
return split("\n",curl_exec($ch));
}

Mon niveau PHP étant limité, je ne sais pas écrire la condition qui m’affichera ou non le message souhaité.

Un motivé dans la salle ?
Merci.
 
WRInaute accro
la fonction présentée par Koxin-L ne se place pas du côté visiteur, vu l'appel à curl. En fait, elle vérifie si une url fait une redirection.
 
WRInaute accro
C'est ce que je souhaite : savoir si le visiteur est amené sur la page qu'il est en train de consulter par une 301 (interne) et si c'est bien le cas, afficher un message.
 
WRInaute accro
oui, mais tu ne comprends pas que ce script vérifie si l'url A est redirigé, de façon externe. Alors que toi tu veux savoir si un internaute sur l'url B provient d'une redirection de A.
Si c'est une redirection définie dans ton htaccess, la solution serait d'ajouter un paramètre à la redirection, mais le problème, c'est qu'elle apparaitrait dans ta redirection visible.
Si c'est hors htaccess, utilise une variable session
 
WRInaute accro
Ok merci.
Leonick a dit:
Si c'est une redirection définie dans ton htaccess, la solution serait d'ajouter un paramètre à la redirection, mais le problème, c'est qu'elle apparaitrait dans ta redirection visible.
Si c'est hors htaccess, utilise une variable session
La redirection est faite en PHP
Code:
if ($row != "") {
echo '<div>...</div>';
}
else
{
header("HTTP/1.1 301 Moved Permanently");
header("Location: http:/.../");
}
Je vais jeté un oeil du côté des variables de session.
Si tu as une idée ne te gêne pas :)
 
Discussions similaires
Haut