Рассмотрим следующую схему:
site A ------> site B (old URL) --- 301 redirect ---> site C (new URL)
Пользователь посещает сайт A. Сайт A содержит ссылку на сайт B (старый URL). Когда пользователь нажимает на ссылку на сайт B, он перенаправляется на сайт C (новый URL). Сайт B перенаправляет на сайт C.
Когда пользователь наконец достигнет сайта C, я бы хотел уведомить его о перенаправлении.
HTTP_REFERER
заголовок при обработке входящих запросов на сайте C, но URL-адрес ссылающегося сайта, похоже, указывает на сайт A. Я ожидал, что он ссылается на сайт B. Я что-то упустил из-за перенаправлений 301 и реализации этого конкретного заголовка? Я знаю, что он установлен браузером и может вести себя неожиданно, но почему нельзя ожидать, что он ссылается на сайт B (тот, который создал перенаправление)??redirected=1
Строка запроса до конца нового URL при выдаче перенаправления звучит как решение, но для этого требуется: a) обеспечить наличие канонических URL, чтобы избежать дублирования содержимого, и b) испортить новый URL, который я хотел бы сохранить чистым насколько это возможно внутри адресной строки;Всегда есть возможность показать промежуточную страницу перенаправления с предопределенным тайм-аутом, пока перенаправление Javascript или метаобновления не выполнит чудеса, но я бы хотел избежать этого подхода и вместо этого показывать сообщение на новом веб-сайте, чтобы не сбить с толку как пользователей, так и веб сканеры, как я читал, перенаправления в браузере не так надежны, как на стороне сервера.
Каков общий подход к решению этой проблемы?
Обновить: Как насчет перенаправления с сайта B, скажем, example.com/redirect.php?referrer_url=oldurl&redirect_to=newurl
?
redirect.php
затем обнаружит oldurl
в качестве URL-адреса ссылки, перенаправьте сообщение о перенаправлении в сеанс и введите 301 перенаправление в example.com/newurl
, Это хорошая идея с точки зрения SEO?
Вы можете отправить свой собственный http-заголовок с перенаправлением, например:
header('RedirectedFrom: www.something.com/ifoo/bar.html');
и использовать это на целевом сайте для распознавания перенаправлений
$headers = headers_list();
foreach($headers as $header) {
list($name,$value) = explode(':',$header);
if($value == 'RedirectedFrom') {
// what ever you want to do
break;
}
}
Я придумал следующее решение проблемы.
сайт B (старый URL-адрес) перенаправляется на определенный сценарий на сайте C, задачей которого является обработка входящих запросов и выполнение перенаправлений в случае необходимости.
Например, если пользователь просматривает сайт A и нажимает на ссылку на сайт B, он затем перенаправляется на сайт C redirect.php
скрипт, который принимает два параметра GET: referrer_url
а также destination
, referrer_url
старая ссылка на сайт B и destination
относительный путь на сайте C.
Затем скрипт проверяет, что destination
не является абсолютным URL (чтобы избежать массовых перенаправлений на другие сайты), добавляет его к базовому URL сайта C и перенаправляет пользователя на соответствующую страницу. referrer_url
не является обязательным, но может использоваться для определения домена старого сайта B URL (в случае, если существует несколько разных доменов).