Когда отправлять код статуса HTTP?
-
03-07-2019 - |
Вопрос
В настоящее время в моих сценариях PHP я перенаправляю пользователя на пользовательскую страницу ошибки 404, когда он / она пытается получить доступ к контенту, который не существует или не принадлежит этому пользователю. Вот так:
header('Location: http://www.mydomain.com/error/notfound/');
exit;
Я понимаю, что вышеуказанный вызов header () по умолчанию отправляет код состояния перенаправления 302.
Однако я не понимаю, когда мне следует отправлять код 404 не найден. Прежде чем я перенаправить пользователя? Или когда я отображаю страницу / error / notfound / ?
Спасибо за вашу помощь!
Решение
Вы должны сделать что-то вроде этого:
header("HTTP/1.0 404 Not Found");
include 'error.php';
die();
Другие советы
Вы вообще не выполняете 404 ошибки в качестве перенаправления.
Что вы действительно хотите сделать, это отправить заголовок состояния 404, а затем заменить текущий вывод телом страницы 404.
Есть несколько способов сделать это, и это в значительной степени зависит от структуры вашего сайта. Приложения MVC обычно передают это вперед. Я видел другие системы, которые выдают исключение, а затем зарегистрированный обработчик исключений заботится об отображении страницы 404.
Во всяком случае, грубые шаги
<Ол>Вы не можете использовать 404 и Location: вместе. Местоположение действительно только для некоторых ответов (201 и 3xx)
Однако вы можете отправить пользовательскую HTML-страницу как текст вашего ответа 404.
С php.net:
Есть два вызова заголовка специального случая. Первый - это заголовок, который начинается со строки «HTTP /». (регистр не имеет значения), который будет использоваться для определения кода состояния HTTP для отправки. Например, если вы настроили Apache для использования PHP-скрипта для обработки запросов на отсутствующие файлы (с помощью директивы ErrorDocument), вы можете убедиться, что ваш скрипт генерирует правильный код состояния. Р>
<?php
header("HTTP/1.0 404 Not Found");
?>
Вы должны отправить код состояния 404 HTTP. Это понимают браузеры и сканеры . Вы также можете добавить более удобную страницу с сообщениями об ошибках, объясняющую, что произошло, включая форму для поиска по вашему сайту, ссылки на Soundex и т. Д.
A " перенаправление " и "не найден"; разные понятия.
Какой файл можно найти?
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, и это довольно неприятно.