В настоящее время в моих PHP-скриптах я перенаправляю пользователя на пользовательскую 404-страничную страницу с ошибкой, когда он пытается получить доступ к контенту, который не существует или не принадлежит этому пользователю. Вот так:
header('Location: http://www.mydomain.com/error/notfound/'); exit;
Я понимаю, что вышеупомянутый вызов header () по умолчанию отправляет код статуса перенаправления 302.
Однако я не понимаю, когда я должен отправить 404 не найденный код состояния. Прежде чем перенаправить пользователя? Или когда я показываю / error / notfound / page?
Спасибо за вашу помощь!
Вы должны сделать что-то вроде этого:
header("HTTP/1.0 404 Not Found"); include 'error.php'; die();
Вы не выполняете 404 ошибок как перенаправление вообще.
То, что вы действительно хотите сделать, это отправить заголовок статуса 404, а затем заменить текущий вывод на тело 404 страницы.
Существуют различные способы сделать это, и это зависит от того, как структурирован ваш сайт. Обычно приложения MVC передают это с помощью функции forward. Я видел другие системы, которые генерируют исключение, а затем зарегистрированный обработчик исключений заботится о отображении страницы 404.
Во всяком случае, грубые шаги
Вы не можете использовать 404 и местоположение: вместе. Место действительно только для некоторых ответов (201 и 3xx)
Однако вы можете отправить пользовательскую HTML-страницу как тело вашего ответа 404.
От php.net:
Существует два вызова заголовка специального случая. Первый – это заголовок, который начинается со строки «HTTP /» (случай не имеет значения), который будет использоваться для определения кода статуса HTTP для отправки. Например, если вы настроили Apache для использования PHP-скрипта для обработки запросов на отсутствие файлов (с помощью директивы ErrorDocument), вы можете убедиться, что ваш сценарий генерирует правильный код состояния.
<?php header("HTTP/1.0 404 Not Found"); ?>
Вы должны отправить код статуса 404 HTTP. Браузеры и сканеры понимают это. Вы также можете включить более удобную страницу с ошибкой, объясняющую, что произошло, включая форму для поиска на вашем сайте, ссылки Soundex и т. Д.
«Редирект» и «не найдены» – это разные понятия.
Какой файл можно найти?
http://www.mydomain.com/error/notfound/
или
http://www.mydomain.com/not_exist.html
На странице « http://www.mydomain.com/not_exist.html » должен быть заголовок 404 и содержимое «Страница не найдена».
Быстрое исправление может быть:
header("HTTP/1.0 404 Not Found"); readfile('http://www.mydomain.com/error/notfound/'); exit;
Но для этого требуется 2 запроса apache и вроде отвратительно.