Информирование пользователя о редиректе 301

Рассмотрим следующую схему:

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?

1

Решение

Вы можете отправить свой собственный 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;
}
}
1

Другие решения

Я придумал следующее решение проблемы.

сайт 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 (в случае, если существует несколько разных доменов).

1

По вопросам рекламы [email protected]