Index.php как пользовательская страница ошибок - PullRequest
2 голосов
/ 14 декабря 2011

Я использую Apache 2.2.X и PHP 5.2.X (установленный как модуль Apache) для создания нового веб-сайта, и я хотел бы прочитать ваши предложения о том, как я пытаюсь обрабатывать ошибки сервера.Я думал об использовании того же файла моей домашней страницы (/index.php) для отображения пользовательских сообщений об ошибках.Это моя настройка .htaccess:

ErrorDocument 400 /index.php?error=400
ErrorDocument 401 /index.php?error=401
ErrorDocument 403 /index.php?error=403
ErrorDocument 404 /index.php?error=404
ErrorDocument 500 /index.php?error=500

Теперь в моем файле index.php есть код, который выглядит следующим образом:

if (isset($_GET['error']))
    DrawErrorPage($_GET['error']);
else
    DrawHomepage();

Все работает как шарм.Ну, все, кроме одной вещи, которую я не могу исправить: если я заставлю Apache ответить кодом состояния 500 (например, вставив искаженный код в мой .htaccess), я не буду перенаправлен на "/index.php?error = 500 ", но вместо этого я получаю страницу ошибки 500 по умолчанию.С любым другим кодом состояния (например, 403 или 404) моя конфигурация работает абсолютно идеально.Но теперь у меня есть сомнения, и я начинаю думать, что было бы лучше использовать другую страницу для обработки ошибок (например, "/error.php").«DrawHomepage ()» должен установить метатег «robots» на «index, follow», а «DrawErrorPage ()» должен установить его на «noindex, nofollow».Правильно?Итак ... что произойдет, если веб-сканер получит сообщение об ошибке при первом посещении моей домашней страницы?Что произойдет, если веб-сканер получит 200 посещений моей домашней страницы в первый раз, а 500 посетит его через месяц?И что произойдет, если я оставлю метатег «роботы» в «index, follow», даже если я показываю ошибки?Есть ли решение этой проблемы?Что бы вы сделали?

Большое спасибо!

1 Ответ

4 голосов
/ 14 декабря 2011

Обычно, если есть код состояния 500, то Apache что-то испортил и не может запустить ваш файл index.php, что приводит к другому 500 коду состояния. Apache продолжает этот цикл ошибок в течение нескольких итераций, прежде чем он, наконец, говорит «больше нет циклов» и отправляет свою собственную страницу ошибок.

Единственный действительно безопасный способ отобразить пользовательскую страницу для кода состояния 500 - это использовать обычный текст или использовать простой файл .html или .shtml, который не пытается получить доступ к другим объектам на вашем сервере, так что вы не Продолжайте вызывать более 500 кодов состояния при загрузке страницы.

Обычно, если сканер встречает 500, он просто временно игнорирует страницу. Код 500 подлежит восстановлению, это не обязательно означает, что там нет страницы, просто сервер в данный момент не работает. Боты умные и могут определить, что означают коды ошибок, если страница всегда отправляет код состояния в заголовке страницы.

Помните, что если вы используете файл PHP в качестве документа об ошибке, вам необходимо повторно отправить код состояния HTTP, используя функцию заголовка внутри PHP, чтобы обеспечить правильное обнаружение страницы, например:

header("HTTP/1.1 404 Page Not Found");
...