Заголовок HTTP-404 не работает в журнале сервера - PullRequest
1 голос
/ 12 июня 2011

Я создал динамический веб-сайт и изменил файл .htaccess для статических URL, и мне нужно создать страницу 404 для SEO.

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

Я использую вышеупомянутую функцию PHP header(), когда нет соответствующей ссылки в базе данных, но когда я проверяю журналы сервера, кажется, что это не работает и выдает HTTP 200 OK код состояния.

Вот строка из журнала сервера:

[My IP] - - [12/Jun/2011:01:47:38 +0300] "GET /4k.html HTTP/1.1" 200 3284 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91 Safari/534.30" 

4k.html - ссылка, которой не существует.

Я что-то упустил?

1 Ответ

0 голосов
/ 12 июня 2011

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

В вашем скрипте PHP вы будете проверять, существует ли страница или нет.Если страница существует, покажите страницу, в противном случае дайте сообщение 404.Поместив header("HTTP/1.0 404 Not Found", true); в ваш PHP-файл в точку, где вы знаете, что это 404, он отправит заголовок 404 клиенту, и, следовательно, все было сделано правильно.Чтобы убедиться, что он отправляется правильно, запустите 404 (введя фиктивный URL) и просмотрите детали запроса в инструментах Chrome Developer. В заголовках ответа вы должны увидеть, что вам отправляется 404, а в журналах Apache отображается 200.

...