На данный момент я внедряю систему slug для своего веб-сайта. Я планирую перенаправить недействительные слизни на правильные данные, хранящиеся в базе данных. Например
http://example.com/11/wrong-slug
- htaccess 301 перенаправление с запросом
- Ошибка HTACCESS 404 не работает должным образом
- Rewrite Rule в htaccess преобразовать строку запроса в косые черты php
- используя mod_rewrite с XAMPP и Windows 7 - 64 бит?
- .htaccess вызывает проблемы в подпапках
Хит db, проверьте, является ли слизняк 11 неправильным – слизнуть, если не сделать 301 переадресацию
http://example.com/11/right-slug
Обнаружите 301 и сообщите пользователю, что они следовали недопустимой ссылке
Возможно ли идентифицировать 301 перенаправление, предпочтительно используя PHP, поэтому я могу попросить пользователя обновить закладку и т. Д.
Спасибо, Джейми.
На ум приходят несколько решений:
Вы можете попробовать с get_headers () ah no, он отправляет запрос на URL-адрес, который не то, что вы хотите
Так как вы все равно перенаправляете и тестируете перенаправление с одного и того же компьютера, вы можете просто написать сообщение о неправильном слизе в сеанс пользователя и отобразить его при следующем отображении шаблона представления. Многие фреймворки имеют компонент флэш-мессенджера , который позволяет вам делать это легко, например, с помощью Zend Framework вы должны использовать следующий код в действии вашего контроллера
$ flashMessenger = $ this -> _ helper-> getHelper ('FlashMessenger'); $ flashMessenger-> addMessage («Мы сделали что-то в последнем запросе»);
Вместо того, чтобы немедленно перенаправлять, когда найден неправильный слиз, вы просто визуализируете шаблон View, который сообщает вашему пользователю о неправильном слизе, а затем используйте мета-или javascript-перенаправление из шаблона. При желании вы также можете написать простую ссылку с правильным пупом к шаблону.
И, наконец, вы также можете ввести пользовательский заголовок в 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]] отображает сообщение, а затем отменяет сеанс
еще
Любая обратная связь? Я понимаю, что это не обнаружит 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.'; }