Почему это не работает, так как на предварительно заданной странице 404 не загружается:
header("HTTP/1.0 404 Not Found"); exit;
.htaccess
имеет ErrorDocument 404 /404.html
.
Спасибо.
Убедитесь, что настроенная страница ошибки /404.html
имеет размер содержимого более 512 байт. Многие браузеры, такие как IE, Chrome и т. Д., Не отображают вашу настроенную страницу, если длина содержимого вашей настраиваемой 404-страницы меньше 512.
Основываясь на ваших комментариях, я думаю, что это происходит.
Если вы посмотрите на заголовки access.log или http в Firebug / HTTP Watch и т. Д. Этой пустой страницы, вы увидите код возврата 404. Как только веб-сервер начинает обрабатывать страницу PHP, он уже передал точку, где он будет обрабатывать обработку 404 сам по себе, так как ваш php-файл действительно НАЙДЕН . Теперь, поскольку ваш 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>"); ?>
К сожалению, я недавно столкнулся с той же проблемой, работая над проектом PHP для работы.
Отправка заголовка по существу является только «сообщением о статусе» и не делает браузер или сервер отображать определенную страницу (хотя я считаю, что некоторые более старые версии IE могут показывать страницу по умолчанию 404). Это означает, что вам нужно будет создать собственное сообщение об ошибке 404 в вашем скрипте, поскольку обработка ошибок .htaccess не будет работать.
Мое предложение – использовать что-то в соответствии с
header("HTTP/1.0 404 Not Found"); include('./404.html'); exit;
вheader("HTTP/1.0 404 Not Found"); include('./404.html'); exit;
Я знаю, что это может показаться глупым, но пока это единственный способ, который я нашел, который будет работать.
Скорее всего, это связано с тем, что Apache уже передал исходный запрос на страницу PHP для обработки. Скорее всего, потому, что у вас есть реализация переднего контроллера и перенаправляет все веб-запросы на эту страницу. Это оставляет ответственность 404s за ваше приложение вместе с соответствующей 404 страницей для отображения.