2010-09-09 3 views
1

Je fais une redirection 301 sur le site A vers le site B - lorsque l'utilisateur arrive sur le site B, il doit trouver la page d'où vient l'utilisateur. Cela ne semble pas fonctionner si:PHP 301 Redirect - collecter le référent

$_SERVER['HTTP_REFERER'] 

alors que si je fais un lien vers la page

<a href="http://site-b.com">go</a> 

je reçois le referrer à travers. Y a-t-il une raison pour que cela ne se fasse pas après la redirection? Si oui, quelqu'un peut-il offrir des conseils sur la façon de procéder? Je veux éviter à tout prix d'avoir une chaîne de requête sur la redirection.

Y at-il peut-être un autre en-tête que je dois envoyer avec la page qui redirige?

Merci pour votre conseil!

Répondre

3

Le fait est que le HTTP_REFERER est le site A. Voilà comment fonctionne un 301. Cela dit, le moyen le plus simple de le faire est de placer l'url du référent sur le site A à la fin de l'URL du site B en tant que variable. Ensuite, sur le site B, chaque fois que vous avez une référence du site A, vous pouvez l'avoir.

<?php 
    header("Location: http://site-b.com/?ref=" 
      .urlencode($_SERVER['HTTP_REFERER']),TRUE,301); 
?> 

Alors bien sûr, sur le site B, l'accès urldecode($_GET['ref']) pour votre referrer.

Cependant ... si vous cherchez à éviter les variables _GET, vous avez quelques options.

A) Recueillir la demande _GET, puis re-munge l'URL - IE ont le site B redirect à une version "propre" de lui-même.

B) Demandez à votre page de redirection faire une curl ou stream_get_contents vers une page « de collection » avant de délivrer un header(), où vous recueillir et stocker l'une des informations de session (comme le refererer) et l'ont préparé à être traitées lorsqu'ils redirigent.

0

Vous pouvez essayer d'ajouter une chaîne de requête CGI à la fin de votre URL lorsque vous faites la redirection - par exemple

http://www.site-b.com?redirectfrom=www.site-a.com 

site-b.com ne tiendrait pas compte du paramètre d'URL, mais il serait enregistré dans la logs et serait accessible depuis PHP.

+0

L'affiche originale dit qu'il veut éviter les chaînes de requête à tout prix donc je ne pense pas que ce sera ce qu'ils sont après –

+0

oui, la chaîne de requête n'est pas vraiment une option, merci pour la suggestion si. – kieran

-1

Vous pouvez le faire avec javascript. Utilisez le script suivant, mais il entre < tête > et </tête >

<script type="text/javascript"> 
location.href='http://www.site-b.com'; 
</script> 

Ce sera bien sûr pas faire un bon HTTP 301 redir, mais je viens de tester, et il enverra le referer (le referer étant site-a).