Spec-Zone.ru › Apache HTTP Server

Пользовательские страницы ошибок

Хотя веб-сервер Apache HTTP Server предоставляет стандартные ответы об ошибках при получении кодов состояния HTTP 4xx или 5xx, эти ответы довольно лаконичны, неинформативны и могут отпугнуть посетителей сайта. Вы можете настроить собственные ответы об ошибках — более дружелюбные, на языке, отличном от английского, или оформленные в соответствии с дизайном вашего сайта.

Пользовательские ответы об ошибках можно определить для любого кода состояния HTTP, обозначающего ошибку, то есть для любого кода 4xx или 5xx.

Кроме того, предусмотрен набор переменных, значения которых можно использовать для дальнейшей настройки документа об ошибке с помощью серверных включений. Также можно обрабатывать ошибки с помощью программы CGI или другого динамического обработчика (PHP, mod_perl и т. д.), использующего эти переменные.

Настройка

Пользовательские документы об ошибках настраиваются с помощью директивы ErrorDocument, которую можно использовать в глобальном контексте, контексте виртуального хоста или каталога. Её можно использовать в файлах .htaccess, если для AllowOverride задано значение FileInfo.

ErrorDocument 500 "Sorry, our script crashed. Oh dear"
ErrorDocument 500 /cgi-bin/crash-recover
ErrorDocument 500 http://error.example.com/server_error.html
ErrorDocument 404 /errors/not_found.html
ErrorDocument 401 /subscription/how_to_subscribe.html

Синтаксис директивы ErrorDocument:

ErrorDocument <3-digit-code> <action>

где действие интерпретируется следующим образом:

  1. Локальный URL для перенаправления (если действие начинается с символа «/»).
  2. Внешний URL для перенаправления (если действие является допустимым URL).
  3. Текст для отображения (если ни одно из предыдущих условий не выполнено). Если текст состоит более чем из одного слова, его необходимо заключить в кавычки (").

При перенаправлении на локальный URL задаются дополнительные переменные среды, позволяющие дополнительно настроить ответ. При перенаправлении на внешние URL они не передаются.

Доступные переменные

Перенаправление на другой URL может быть полезным, но только если можно передать некоторую информацию, которая затем поможет понятнее объяснить ошибку или записать её в журнал.

Для этого при выполнении перенаправления из-за ошибки задаются дополнительные переменные среды. Они формируются из заголовков исходного запроса: к имени исходного заголовка добавляется префикс «REDIRECT_». Благодаря этому документ об ошибке получает контекст исходного запроса.

Например, помимо более привычных переменных среды, вы можете получить следующие переменные.

REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/jpeg, image/png
REDIRECT_HTTP_USER_AGENT=Mozilla/5.0 Fedora/3.5.8-1.fc12 Firefox/3.5.8
REDIRECT_PATH=.:/bin:/usr/local/bin:/sbin
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=client.example.com
REDIRECT_SERVER_NAME=www.example.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/2.2.15
REDIRECT_URL=/cgi-bin/buggy.pl

Переменные среды REDIRECT_ создаются на основе переменных среды, существовавших до перенаправления. Их имена изменяются: добавляется префикс REDIRECT_; то есть HTTP_USER_AGENT становится REDIRECT_HTTP_USER_AGENT.

Гарантируется, что переменные REDIRECT_URL, REDIRECT_STATUS и REDIRECT_QUERY_STRING будут заданы. Остальные заголовки будут заданы только в том случае, если они существовали до возникновения ошибки.

Ни одна из этих переменных не будет задана, если целью ErrorDocument является внешнее перенаправление (любое перенаправление, начинающееся с имени схемы, например http:, даже если оно указывает на тот же хост, что и сервер).

Настройка ответов об ошибках

Если в качестве ErrorDocument указать динамический обработчик, например документ с серверными включениями, сценарий CGI или другой обработчик, можно использовать доступные пользовательские переменные среды для настройки ответа.

Если в ErrorDocument задано локальное перенаправление на сценарий CGI, сценарий должен включать в свой вывод поле заголовка «Status:», чтобы обеспечить передачу клиенту информации об ошибке, вызвавшей его запуск. Например, сценарий Perl для ErrorDocument может содержать следующее:

...
print  "Content-type: text/html\n";
printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"};
...

Если сценарий предназначен для обработки определённой ошибки, например 404 Not Found, вместо этого можно использовать соответствующий код и текст ошибки.

Обратите внимание: если ответ содержит заголовок Location: (для перенаправления на стороне клиента), сценарий должен выдавать соответствующий заголовок Status: (например, 302 Found). В противном случае заголовок Location: может не подействовать.

Многоязычные пользовательские документы об ошибках

В комплект установки Apache HTTP Server входит каталог пользовательских документов об ошибках, переведённых на 16 языков. Кроме того, в каталоге конфигурации conf/extra находится файл конфигурации, который можно подключить, чтобы включить эту возможность.

В файле конфигурации сервера вы увидите строку вида:

# Multi-language error messages
#Include conf/extra/httpd-multilang-errordoc.conf

Раскомментировав эту строку Include, вы включите эту возможность. Сообщения об ошибках будут выбираться с учётом языковых предпочтений, заданных в браузере клиента.

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

Эти документы можно настроить в соответствии с вашими пожеланиями, чтобы предоставить пользователям более полезную информацию о сайте и о том, что они могут на нём найти.

Для использования этой возможности необходимо включить mod_include и mod_negotiation.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/custom-error.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API