Почему apache не показывает ошибку 404 при отправке заголовка 404 с php? - PullRequest
7 голосов
/ 08 августа 2009

У меня есть header('HTTP/1.0 404 Not Found'); где-то в коде, но он по какой-то причине не перенаправляет на страницу Apache по умолчанию 404.

У меня есть правило перезаписи для файла .htaccess, которое перенаправляет каждый запрос в index.php. Может ли это быть проблемой?

Ответы [ 2 ]

18 голосов
/ 08 августа 2009

Заголовок - это не то, что говорит Apache для отображения страницы 404. Скорее, , когда Apache отображает свою страницу 404, он отправляет вместе с ней заголовок 404. Заголовок должен иметь значение для браузера , а не для сервера. Apache отображает 404, когда не может найти нужный файл для отображения. Так как вы находитесь в PHP-скрипте, Apache уже нашел файл, который он может отобразить, и, следовательно, не будет отображать свою собственную страницу 404.

7 голосов
/ 08 августа 2009

Заголовки, отправляемые PHP, в данном случае имеют значение только для браузера. Apache не собирается создавать свою собственную страницу, потому что вы уже обрабатываете страницу, и если вы что-то отправили, эти два будут конфликтовать.

Да, файл .htaccess не позволит Apache отображать страницу с ошибкой, поскольку ваши правила заставляют Apache думать, что у него больше нет ошибки 404, потому что он нашел страницу для показа.

Отправка заголовка на самом деле является только «сообщением о состоянии» и не заставляет браузер или сервер отображать определенную страницу. (Хотя большинство браузеров будут).

Как отметил Дав в комментариях, вы захотите отправить 404 ошибки на их собственную страницу ошибок.

...