<-
Apache > HTTP Server > Documentation > Version 2.0 > Miscellaneous Documentation

Международные Настроенные Ошибочные Сообщения Сервера

предупреждение:

этот документ не был полностью обновлен, чтобы принять во внимание изменения, сделанные в 2.0 версиях Apacheского Сервера HTTP. Часть информации может все еще быть уместной, но пожалуйста используйте это с заботой.

этот документ описывает легкий способ обеспечить ваш Apache Сервер HTTP рядом настроенных ошибочных сообщений, которые используют в своих интересах Content Negotiation и mod_include возвращать ошибочные сообщения, произведенные сервером в родном языке клиента.

top

Introduction

при использовании ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ, всех ErrorDocument сообщения могут разделить homogenous и последовательный стиль и расположение, и работа обслуживания (изменяющийся изображения, изменяя связи) сохранена к минимуму, потому что вся информация расположения может быть сохранена в единственном файле.

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

Удовлетворить Переговоры, тогда выбирает соответствующую языковую версию специфического ошибочного текста сообщения, соблюдая языковое предпочтение прошел в запросе клиента. (Пользователи обычно выбирают их любимые языки в меню вариантов предпочтения сегодняшних браузеров). Когда ошибочный документ в первичной языковой версии клиента недоступен, вторичные языки пробуют или неплатеж (отступление), версия используется.

Вы имеете полную гибкость в проектировании ваших ошибочных документов вашему личному вкусу (или соглашения вашей компании). В целях демонстрации, мы представляем простую родовую ошибочную схему документа. Для этого гипотетического сервера, мы предполагаем что все ошибочные сообщения...

пример "документа, не найденного" сообщение для немецкого клиента мог бы быть похож на это:

[Needs graphics capability to display]

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

top

Creating an ErrorDocument directory

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

  1. определяя Мультипредставления Options , мы позволяем языковой выбор самой соответствующей языковой альтернативы (удовлетворите переговоры).
  2. устанавливая LanguagePriority директива мы определяем ряд языков отступления по умолчанию в ситуации, где браузер клиента не выражал никакого предпочтения вообще.
  3. позволяя mod_include (и отвергающее выполнение cgi подлинников для соображений безопасности), мы позволяем серверу включать стандартные блоки ошибочного сообщения, и заменять ценностью определенных переменных окружающей среды в произведенный документ (динамический HTML) или даже условно включать или опустить части текста.
  4. AddHandler и AddType директивы полезны для автоматически РАСШИРЯЮЩЕГО ПЕРВУЮ СТЕПЕНЬ ИНТЕГРАЦИИ все файлы с a .shtml суффикс к текст/HTML .
  5. при использовании Alias директива, мы держим ошибочный справочник документа вне дерева документа, потому что это может быть расценено больше как часть сервера чем часть дерева документа.
  6. <Directory> блок ограничивает эти "специальные" параметры настройки ошибочным справочником документа и избегает воздействия на любые из параметров настройки для регулярного дерева документа.
  7. для каждого из ошибочных кодексов, которые будут обработаны (см. RFC2068 для точного описания каждого ошибочного кодекса, или смотрят на src/main/http_protocol.c если Вы желаете видеть стандартные сообщения Apacheа), ErrorDocument в aliased /errordocs справочник определен. Отметьте, что мы только определяем basename документа здесь, потому что выбор Мультипредставлений выберет лучшего кандидата, основанного на языковых суффиксах и предпочтении клиента. Любая ошибочная ситуация с ошибочным кодексом нет с обработанный в соответствии с таможенным документом будет иметься дело сервером стандартным способом ( то есть. , простое ошибочное сообщение на английском языке).
  8. наконец, AllowOverride директива говорит Apacheу, что не необходимо искать .htaccess файл в/errordocs справочнике: незначительная оптимизация скорости.

окончание httpd.conf конфигурация тогда выглядела бы подобной этому:

отметить

отметить, что Вы можете определить ваши собственные ошибочные сообщения, используя этот метод для только части дерева документа, например, / ~user/поддерево. В этом случае, конфигурация могла также быть помещена в .htaccess файл в корень поддерева, и <Directory> и </Directory> директивы - но не содержавшиеся директивы - должны быть опущены.

LanguagePriority en fr de
Alias /errordocs /usr/local/apache/errordocs

<Directory /usr/local/apache/errordocs>
AllowOverride none
Options MultiViews IncludesNoExec FollowSymLinks
AddType text/html .shtml
<FilesMatch "\.shtml[.$]">
SetOutputFilter INCLUDES
</FilesMatch>
</Directory>

# "400 Bad Request",
ErrorDocument 400 /errordocs/400
# "401 Authorization Required",
ErrorDocument 401 /errordocs/401
# "403 Forbidden",
ErrorDocument 403 /errordocs/403
# "404 Not Found",
ErrorDocument 404 /errordocs/404
# "500 Internal Server Error",
ErrorDocument 500 /errordocs/500

справочник для ошибочных сообщений (здесь: /usr/local/apache/errordocs/ ) должен тогда быть создан с соответствующими разрешениями (удобочитаемый и выполнимый сервером uid или ценурозом, только перезаписываемым для администратора).

Naming the Individual Error Document files

определяя MultiViews выбор, серверу говорили автоматически просмотреть справочник для того, чтобы соответствовать вариантам (смотрящий на язык и довольные суффиксы типа), когда требуемый документ не был найден. В конфигурации, мы определили названия для ошибочных документов, чтобы быть только их ошибочным числом (без любого суффикса).

названия индивидуальных ошибочных документов теперь определены как это (я использую 403 как пример, думаю об этом как placeholder для любого из формируемых ошибочных документов):

The Common Header and Footer Files

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

один из этих файлов расположения определяет удар головой документа HTML и конфигурируемый список дорожек к изображениям, которые будут показаны в получающемся ошибочном документе. Эти дорожки экспортируются как ряд переменных окружающей среды ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ и позже оценены "нижней сноской" специальный файл. В названии текущей ошибки (который помещен в признак НАЗВАНИЯ и удар головой H1) просто передают из главного ошибочного документа в названной переменной title .

изменяя этот файл, расположение всех произведенных ошибочных сообщений может быть изменено через секунду. (эксплуатируя особенности ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ, Вы можете легко определить различные расположения, основанные на текущем действительном хозяине, или даже основанный на названии области клиента).

второй файл расположения описывает нижнюю сноску, которая будет показана у основания каждого ошибочного сообщения. В этом примере, это показывает Apacheскую эмблему, текущее время сервера, вереницу версии сервера и добавляет ссылку почты на webmaster участка.

для простоты, просто называют файл удара головой head.shtml потому что это содержит разобранное сервером содержание, но никакой язык определенная информация. Файл нижней сноски существует однажды для каждого языкового перевода, плюс symlink для языка по умолчанию.

for English, French and German versions (default english)

foot.shtml.en,
foot.shtml.fr,
foot.shtml.de,
foot.shtml symlink to
foot.shtml.en

оба файла включены в ошибочный документ при использовании директив <!--#include virtual="head" --> и <!--#include virtual="foot" --> соответственно: остальная часть волшебства происходит в mod_negotiation и в mod_include.

см. the listings below видеть фактическое выполнение HTML обсужденного примера.

Creating ErrorDocuments in Different Languages

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

<!--#set var="title" value=" error description title " -->
<!--#include virtual="head" -->
explanatory error text
<!--#include virtual="foot" -->

в listings section , Вы можете видеть пример [400 Плохих Запросов] ошибочный документ. Документы столь же простые как тот конечно не вызывают никаких проблем перевести или расширяться.

The Fallback Language

мы нуждаемся в специальной обработке для языков кроме тех, мы имеем переводы для? Мы устанавливали LanguagePriority, не так ли?!

хорошо, директива LanguagePriority - для случая, где клиент не выражает никакого языкового приоритета вообще. Но что случается в ситуации, где клиент хочет один из языков, мы не имеем, и ни один из тех мы действительно имеем?

не делая ничто, Apache сервер будет обычно возвращаться [406 никаких приемлемых вариантов] ошибка, перечисляя выборы, из которых может выбрать клиент. Но мы находимся в ошибочном сообщении уже, и важная ошибочная информация могла бы теряться, когда клиент должен был выбрать языковое представление сначала.

Так, в этой ситуации это, кажется, легче определить язык отступления (копируя или связываясь, например. , английская версия к языковой меньше версии). Поскольку алгоритм переговоров предпочитает "более специализированные" варианты по "большему количеству родовых" вариантов, эти родовые альтернативы будут только выбраны, когда нормальные переговоры не преуспевали.

простой подлинник снаряда, чтобы сделать это (выполняют в пределах errordocs/директора):

for f in *.shtml.en
do
ln -s $f `basename $f .en`
done

top

Customizing Proxy Error Messages

на Apacheа 1.3, возможно использовать ErrorDocument механизм для ошибочных сообщений по доверенности также (предыдущие версии всегда возвращали установленные предопределенные ошибочные сообщения).

большинство ошибок по доверенности возвращает ошибочный кодекс [500 Внутренних Ошибок Сервера]. Чтобы узнавать, был ли специфический ошибочный документ призван от имени ошибки по доверенности или из-за некоторой другой ошибки сервера, и, какова причина для отказа была, Вы можете проверить содержание нового ERROR_NOTES переменная окружающей среды CGI: если призвано для ошибки по доверенности, эта переменная будет содержать фактический ошибочный текст сообщения по доверенности в форме HTML.

следующая выдержка демонстрирует, как эксплуатировать ERROR_NOTES переменная в пределах ошибочного документа:

<!--#if expr="$REDIRECT_ERROR_NOTES = ''" -->

<p>
The server encountered an unexpected condition
which prevented it from fulfilling the request.
</p>

<p>
<a href="mailto:<!--#echo var="SERVER_ADMIN" -->"
SUBJECT="Error message [<!--#echo var="REDIRECT_STATUS" -->] <!--#echo var="title" --> for <!--#echo var="REQUEST_URI" -->">
Please forward this error screen to <!--#echo var="SERVER_NAME" -->'s
WebMaster</a>; it includes useful debugging information about
the Request which caused the error.

<pre><!--#printenv --></pre>
</p>

<!--#else -->
<!--#echo var="REDIRECT_ERROR_NOTES" -->

<!--#endif -->

top

HTML Listing of the Discussed Example

Так, чтобы суммировать наш пример, вот - полное внесение в список 400.shtml.en документ. Вы заметите, что это содержит почти только ошибочный текст (с условными дополнениями). Начинаясь с этого примера, Вы найдете легким добавить больше ошибочных документов, или перевести ошибочные документы различным языкам.

<!--#set var="title" value="Bad Request"-->
<!--#include virtual="head" -->

<p>
Your browser sent a request that this server could not understand:
<blockquote>
<strong><!--#echo var="REQUEST_URI" --></strong>
</blockquote>

The request could not be understood by the server due to malformed
syntax. The client should not repeat the request without
modifications.
</p>

<p>
<!--#if expr="$HTTP_REFERER != ''" -->
Please inform the owner of
<a href="<!--#echo var="HTTP_REFERER" -->">the referring page</a> about
the malformed link.

<!--#else -->
Please check your request for typing errors and retry.

<!--#endif -->
</p>

<!--#include virtual="foot" -->

вот - полное head.shtml.en файл (забавные перерывы линии избегают пустых линий в документе после обработки ПЕРВОЙ СТЕПЕНИ ИНТЕГРАЦИИ). Отметьте секцию конфигурации в вершине. Это - то, где Вы формируете изображения и эмблемы так же как Apache справочник документации. Смотрите, как этот файл показывает две различных эмблемы в зависимости от содержания действительного названия ($SERVER_NAME) хозяина, и что оживляемую Apacheскую эмблему показывают, кажется ли браузер, поддерживает это (последний требует линий конфигурации сервера формы

BrowserMatch "^Mozilla/[2-4]" anigif

для типов браузера, которые поддерживают оживляемый GIFs).

<!--#if expr="$SERVER_NAME = /.*\.mycompany\.com/" -->
<!--#set var="IMG_CorpLogo" value="http://$SERVER_NAME:$SERVER_PORT/errordocs/CorpLogo.gif" -->
<!--#set var="ALT_CorpLogo" value="Powered by Linux!" -->

<!--#else -->
<!--#set var="IMG_CorpLogo" value="http://$SERVER_NAME:$SERVER_PORT/errordocs/PrivLogo.gif" -->
<!--#set var="ALT_CorpLogo" value="Powered by Linux!" -->
<!--#endif-->

<!--#set var="IMG_BgImage" value="http://$SERVER_NAME:$SERVER_PORT/errordocs/BgImage.gif" -->
<!--#set var="DOC_Apache" value="http://$SERVER_NAME:$SERVER_PORT/Apache/" -->

<!--#if expr="$anigif" -->
<!--#set var="IMG_Apache" value="http://$SERVER_NAME:$SERVER_PORT/icons/apache_anim.gif" -->
<!--#else-->
<!--#set var="IMG_Apache" value="http://$SERVER_NAME:$SERVER_PORT/icons/apache_pb.gif" -->
<!--#endif-->

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>
[<!--#echo var="REDIRECT_STATUS" -->] <!--#echo var="title" -->
</title>
</head>

<body bgcolor="white" background="<!--#echo var="IMG_BgImage" -->">
<h1 align="center">
[<!--#echo var="REDIRECT_STATUS" -->] <!--#echo var="title" -->
<img src="<!--#echo var="IMG_CorpLogo" -->"
  alt="<!--#echo var="ALT_CorpLogo" -->" align="right">
</h1>

<hr /> <!-- ======================================================== -->
<div>

и это- foot.shtml.en файл:

</div>
<hr />

<div align="right">
<small>Local Server time: <!--#echo var="DATE_LOCAL" --></small>
</div>

<div align="center">
<a href="<!--#echo var="DOC_Apache" -->">
<img src="<!--#echo var="IMG_Apache" -->" border="0" align="bottom"
  alt="Powered by <!--#echo var="SERVER_SOFTWARE" -->"></a>
<br />
<small><!--#set var="var" value="Powered by $SERVER_SOFTWARE --
File last modified on $LAST_MODIFIED" -->
<!--#echo var="var" --></small>
</div>

<p>If the indicated error looks like a misconfiguration, please inform
<a href="mailto:<!--#echo var="SERVER_ADMIN" -->"
subject="Feedback about Error message [<!--#echo var="REDIRECT_STATUS" -->]
<!--#echo var="title" -->, req=<!--#echo var="REQUEST_URI" -->">
<!--#echo var="SERVER_NAME" -->'s WebMaster</a>.
</p>

</body>
</html>

если Вы имеете подсказки, чтобы внести, послать почту martin@apache.org