PHP 301 Redirect - собирать реферер - PullRequest
1 голос
/ 09 сентября 2010

Я делаю 301 перенаправление с сайта A на сайт B - когда пользователь попадает на сайт B, ему нужно найти страницу, с которой он пришел.Это, похоже, не работает:

$_SERVER['HTTP_REFERER']

, тогда как, если я делаю ссылку на страницу

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

, я получаю реферал через.Есть ли причина, по которой он не проходит после перенаправления?Если так, то кто-нибудь может дать совет, как это сделать.Я хочу во что бы то ни стало избежать наличия строки запроса на перенаправлении.

Может быть, есть еще один заголовок, который мне нужно отправить со страницей, которая перенаправляет?

Спасибо за любой совет!

Ответы [ 3 ]

3 голосов
/ 09 сентября 2010

Дело в том, что HTTP_REFERER - это сайт А. Вот как работает 301.

Тем не менее, простой способ сделать это - перевести URL-адрес ссылающегося на сайт A в конец URL-адреса сайта B в качестве переменной. Затем, на сайте B, в любое время, когда у вас есть реферал с сайта A, вы можете его получить.

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

Затем, конечно, на сайте B, получите доступ к urldecode($_GET['ref']) для вашего реферера.

Однако ... если вы хотите избежать _GET переменных, у вас есть несколько вариантов.

A) Соберите запрос _GET, затем повторно измените URL - IE перенаправляет сайт B на «чистую» версию самого себя.

B) Перед перенаправлением header() ваша перенаправляющая страница перенаправляет curl или stream_get_contents на страницу "сбора", где вы собираете и сохраняете любую информацию о сеансе (например, реферера) и подготовить его к обработке при перенаправлении.

0 голосов
/ 09 сентября 2010

Вы можете сделать это с помощью JavaScript. Используйте следующий скрипт, но он между и

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

Это, конечно, не приведет к правильному перенаправлению HTTP 301, но я только что проверил его, и он отправит реферер (реферер - site-a).

0 голосов
/ 09 сентября 2010

Вы можете попробовать добавить строку запроса CGI в конец вашего URL при выполнении перенаправления - например,

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

site-b.com будет игнорировать параметр URL, но он будет записан вжурналы и будут доступны изнутри PHP.

...