У меня есть header('HTTP/1.0 404 Not Found');
где-то рядом с кодом, но по какой-то причине он не перенаправляет на страницу Apache по умолчанию 404.
У меня есть правило Rewrite в файле .htaccess, который перенаправляет каждый запрос на index.php. Может ли это быть проблема?
Заголовок не является тем, что говорит Apache, чтобы отобразить его страницу 404. Скорее, когда Apache отображает страницу 404, он отправляет вместе с ним заголовок 404. Заголовок должен иметь смысл для браузера , а не для сервера. Apache отображает 404, когда он не может найти нужный файл для отображения. Поскольку вы находитесь в PHP-скрипте, Apache уже нашел файл, который он может отображать, и, следовательно, не будет показывать свою собственную страницу 404.
Заголовки, отправленные PHP, в этом случае имеют значение только для браузера. Apache не собирается создавать свою собственную страницу, потому что вы уже обрабатываете страницу, и если вы что-то отправили, то конфликтуют.
Да, файл .htaccess
остановит Apache на показе страницы с ошибкой, потому что ваши правила заставляют Apache думать, что у него больше нет ошибки 404
, потому что он нашел страницу для показа.
Отправка заголовка на самом деле является только «сообщением о статусе» и не делает браузер или сервер показывать определенную страницу. (Хотя большинство браузеров будет).
Как отметил Дав в комментариях, вы захотите отправить 404 ошибки на собственную страницу ошибок.