Когда отправлять код статуса HTTP?

В настоящее время в моих 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.

Во всяком случае, грубые шаги

  1. Определение недопустимого содержимого
  2. Нарушение текущего исполнения
  3. Очистите любой выход, если он есть.
  4. Отправлять заголовок статуса 404
  5. Отправить содержимое страницы 404

Вы не можете использовать 404 и местоположение: вместе. Место действительно только для некоторых ответов (201 и 3xx)

Однако вы можете отправить пользовательскую HTML-страницу как тело вашего ответа 404.

От php.net:

Существует два вызова заголовка специального случая. Первый – это заголовок, который начинается со строки «HTTP /» (случай не имеет значения), который будет использоваться для определения кода статуса HTTP для отправки. Например, если вы настроили Apache для использования PHP-скрипта для обработки запросов на отсутствие файлов (с помощью директивы ErrorDocument), вы можете убедиться, что ваш сценарий генерирует правильный код состояния.

 <?php header("HTTP/1.0 404 Not Found"); ?> 

http://us.php.net/manual/en/function.header.php

Вы должны отправить код статуса 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 и вроде отвратительно.