PHP: невозможно изменить код состояния 404, но в заголовке нет ошибки - PullRequest
1 голос
/ 01 июля 2010

Я обрабатываю недоступные страницы на моем собственном PHP-сайте. Для этого я создал файл .htaccess с одной строкой:

ErrorDocument 404 /index.php

В начале index.php я поместил этот код:

header($_SERVER['SERVER_PROTOCOL'].' 200 OK', true, 200);

Это прекрасно работает в моей среде WAMP. Я проверяю заголовки http, и он выдает:

Status=OK - 200

Но на моем Linux-хостинге я всегда получаю:

Status=Not Found - 404

И странная часть в том, что PHP вообще не выдает никаких ошибок ... это как будто что-то перекрывает мои заголовки.

Мне нужно изменить заголовок кода состояния, иначе IE7 и IE8 не будут обрабатывать мою страницу результатов. Другие браузеры могут справиться с этим.

Может быть, мне нужно что-то в .htaccess или php.ini, но я не нашел ничего связанного. Или, если вам известен какой-либо другой способ перенаправления 404 и возврата 200, дайте мне знать.

Ответы [ 2 ]

3 голосов
/ 30 мая 2011

В зависимости от конфигурации вашего веб-сервера, fast-cgi может быть включен. Тогда вам нужен альтернативный синтаксис (как указано в документации PHP):

header("Status: 200 OK"); // for fast cgi
header($_SERVER['SERVER_PROTOCOL'] . " 200 OK");
2 голосов
/ 01 июля 2010

Лучший способ перезаписи несуществующих страниц в файл PHP заключается в следующем:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule (.*) index.php

При этом mod_rewrite используется для изменения всего, что не является каталогом и не файлом в вашем сценарии PHP.Просто помните, что если ваш PHP-скрипт получает запрос на то, чего там нет, он должен отправить 404 заголовок.

...