Я обрабатываю неизведанные страницы на своем собственном веб-сайте 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, сообщите мне.
Лучшим способом перезаписи несуществующих страниц в файл PHP является следующее:
RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule (.*) index.php
Это использует mod_rewrite для изменения всего, что не является каталогом, а не файлом для вашего PHP-скрипта. Просто помните, что если ваш PHP-скрипт получает запрос на то, чего там нет, он должен отправить заголовок 404.
В зависимости от конфигурации вашего веб-сервера, fast-cgi может быть включен. Тогда вам потребуется альтернативный синтаксис (как указано в документации PHP):
header("Status: 200 OK"); // for fast cgi header($_SERVER['SERVER_PROTOCOL'] . " 200 OK");