PHP заголовок 404 не работает - PullRequest
5 голосов
/ 06 мая 2011

Почему это не работает, так как в предустановленной странице 404 не загружается:

header("HTTP/1.0 404 Not Found");
exit;

.htaccess имеет установленную директиву ErrorDocument 404 /404.html.Спасибо.

Ответы [ 3 ]

6 голосов
/ 06 мая 2011

Я, к сожалению, недавно столкнулся с той же проблемой, работая над проектом PHP для работы.

Отправка заголовка - это, по сути, только «сообщение о состоянии», которое не заставляет браузер или сервер отображать конкретныйстраница (хотя я считаю, что некоторые старые версии IE могут показывать страницу по умолчанию 404).Это означает, что вам нужно будет создать собственное сообщение об ошибке 404 в вашем скрипте, так как обработка ошибок .htaccess не будет работать.

Я предлагаю использовать что-то вроде

header("HTTP/1.0 404 Not Found");
include('./404.html');
exit;

Я знаю, что это может показаться глупым, но пока это единственный способ, который я нашел, который будет работать.

5 голосов
/ 06 мая 2011

Убедитесь, что настроенная страница ошибки /404.html имеет размер содержимого более 512 байт. Многие браузеры, такие как IE, Chrome и т. Д., Не отображают пользовательскую страницу, если длина содержимого пользовательской страницы 404 меньше 512.

UPDATE

Основываясь на ваших комментариях, я думаю, что происходит.

Если вы посмотрите на заголовки access.log или http в Firebug / HTTP Watch и т. Д. На этой пустой странице, вы увидите код возврата 404. Как только веб-сервер начинает обрабатывать страницу PHP, он уже прошел точку, в которой он будет обрабатывать обработку 404 самостоятельно, поскольку ваш php-файл фактически FOUND . Теперь, поскольку ваш php-код просто возвращает статус 404 без содержимого , отображается пустая страница.

Теперь, так как это правильное поведение Apache, и вы сами должны создать содержимое для страницы 404. Нечто подобное в приведенном выше php-коде будет хорошо, я думаю:

<?php
header("HTTP/1.0 404 Not Found");
exit("<h1>Not Found</h1>
The requested URL " . $_SERVER["REQUEST_URI"] . " was not found on this server.
<hr>");
?>
0 голосов
/ 06 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...