Я использую Apache 2.2.X и PHP 5.2.X (установленный как модуль Apache) для создания нового веб-сайта, и я хотел бы прочитать ваши предложения о том, как я пытаюсь обрабатывать серверных ошибок.
Я думал о том, чтобы использовать тот же файл моей домашней страницы (/index.php), чтобы показывать пользовательские сообщения об ошибках. Это мой .htaccess установка:Index.php как пользовательская страница ошибки
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 посещений его через месяц? И что произойдет, если я сохраню метатег «robots» в «index, follow», даже если я покажу ошибки?
Есть ли обходной путь, решение, для решения этой проблемы? Что бы вы сделали?
Большое спасибо!
Хорошего замечания о повторной отправке коды состояния. – FakeRainBrigand
Так, например, если я печатаю ошибку 403 на своей странице, мне также нужно отправить заголовок 403 правильно? Что касается искателей и временных ошибок, все в порядке, я понимаю ... но это также работает, если пользователь вводит, например, «/non-existant.gif» и перенаправляется на «/index.php?error=400»? Что случилось бы? Crawler поражает index.php и получает код состояния 404 ... не так плохо для индексирования? И какой метатег «роботов» следует использовать в обоих случаях? –
Когда пользователь попадает в файл, у него также нет доступа или нет, независимо от причины, страница фактически не перенаправляется. URL-адрес в адресной строке остается неизменным, а * файл, который был выполнен *, изменяется с помощью Apache.Этот файл может хранить данные об ошибке, отображать пользовательскую страницу, но также необходимо отправить соответствующий код ошибки (например, 404), чтобы боты или кто бы ни обращался к нему, перестанут пытаться получить к нему доступ. Вы не говорите, что index.php не существует, вы говорите, что путь, к которому они обращались, не существует. Я не уверен, что вы подразумеваете под метатегами роботов. – animuson