Как определить, является ли реферер редиректом 301 - PullRequest
1 голос
/ 26 декабря 2009

Я сейчас внедряю систему слагов для своего сайта. Я планирую перенаправить недействительных слагов на правильные, которые хранятся в базе данных. Э.Г.

http://example.com/11/wrong-slug

Хит дБ, проверьте, не является ли слизень 11 ошибочным, если нет, сделайте 301 перенаправление

http://example.com/11/right-slug

Обнаружить 301 и сообщить пользователю, что он перешел по недействительной ссылке

Можно ли идентифицировать редирект 301 предпочтительно с помощью PHP, чтобы я мог попросить пользователя обновить там закладку и т. Д.

Спасибо, Джейми.

Ответы [ 5 ]

5 голосов
/ 26 декабря 2009

В качестве альтернативы вы можете добавить параметр GET к вашему URL (если вы не возражаете против этого) и проверить его в своем скрипте PHP. Что-то вроде:

http://example.com/11/right-slug?corrected-from=http://example.com/11/wrong-slug

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

2 голосов
/ 26 декабря 2009

На ум приходит несколько решений:

  1. Вы можете попробовать с помощью get_headers () ах нет, он отправляет запрос на URL, а это не то, что вам нужно

  2. Поскольку вы все равно перенаправляете и тестируете перенаправление с того же компьютера, вы можете просто написать сообщение о неправильном слаге в сеанс пользователя и отобразить его при следующем отображении шаблона представления. Многие фреймворки имеют компонент flash messenger , который позволяет вам сделать это легко, например, с Zend Framework вы будете использовать следующий код в действии вашего контроллера

    $ flashMessenger = $ this -> _ helper-> getHelper ('FlashMessenger'); $ flashMessenger-> addMessage («Мы сделали что-то в последнем запросе»);

  3. Вместо того, чтобы перенаправлять сразу, когда найден неправильный слаг, вы просто визуализируете шаблон View, который сообщает вашему пользователю о неправильном слаге, а затем используете перенаправление мета или javascript из шаблона. При желании вы также можете написать в шаблоне простую ссылку с правильным фрагментом.

  4. И, наконец, вы также можете вставить свой перенаправленный заголовок в редирект через header () , который затем можно прочитать из вашего скрипта. won ' либо не работает, потому что они будут потеряны, как только браузер получит перенаправление с сервера

1 голос
/ 26 декабря 2009

Решением может быть проверка $_SERVER['HTTP_REFERER'] на «новой» странице: если она установлена ​​и соответствует «старой» странице, возможно, это потому, что ваш пользователь был перенаправлен - что означает, что вы можете захотеть отобразить ваше сообщение.

Но учтите, что Referer отправляется браузером пользователя и может быть либо отключен, либо подделан - так что можно использовать его для улучшения опыта, но вы не должны ни на что полагаться критический.

0 голосов
/ 26 декабря 2009

Я думаю, что единственный полезный вариант - использовать куки.

Когда запрашивается URL с неправильным слагом, установите cookie для этого URL без слага:

$path = substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/')+1);
setcookie('wrong-slug', 1, 0, $path);

Затем проверьте, существует ли такой файл cookie, и отобразите ваше сообщение:

if (isset($_COOKIE['wrong-slug'])) {
    echo 'The location of this resource has changed. Please update your bookmarks.';
}
0 голосов
/ 26 декабря 2009

Нашли рабочее решение:

  • Начать сессию.
  • Проверка сеанса, если $ _SESSION ['INVALID_SLUG'] существует, отобразить сообщение, а затем сбросить сеанс

    еще

  • Получить слаг из базы, например / 11 / Right-Slug
  • Получить текущий URI, например / 11 / неправильные пробковый
  • Сравните, если другой набор $ _SESSION ['INVALID_SLUG'], и перенаправьте на правильную страницу

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

Спасибо за помощь.

...