Как определить, является ли реферер перенаправлением 301

На данный момент я внедряю систему slug для своего веб-сайта. Я планирую перенаправить недействительные слизни на правильные данные, хранящиеся в базе данных. Например

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

Хит db, проверьте, является ли слизняк 11 неправильным – слизнуть, если не сделать 301 переадресацию

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

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

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

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

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

  1. Вы можете попробовать с get_headers () ah no, он отправляет запрос на URL-адрес, который не то, что вы хотите

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

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

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

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

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

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

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

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

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

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

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

    еще

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

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

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

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

Когда запрашивается 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.'; }