Linux サーバ構築 ( Fedora Core5 ) - WEBサーバ

apache2 - 4.エラーメッセージ表示の仕組み

apache2 のエラーメッセージの表示の基本的な仕組みです。コンテントネゴシエーションおよび SSI により各国語のエラーメッセージ表示にも対応しています。

apache2 では、次のような仕組みでエラーメッセージが表示されます。(デフォルトの設定の場合)

  1. httpd.conf における エラー・フォルダの設定
    /etc/httpd/conf/httpd.conf ( 抜粋 )
    Alias /error/ "/var/www/error/"
    <IfModule mod_negotiation.c>
    <IfModule mod_include.c>
      <Directory "/var/www/error">
        AllowOverride None
        # SSI は許可するが exec 機能(shell によるコマンド実行)は許可しないようにする
        Options IncludesNoExec
        # このフォルダのすべての html ファイルを SSI で処理する
        AddOutputFilter Includes html
        # 拡張子 var のファイルを type-map ハンドラにマップする
        AddHandler type-map var
        Order allow,deny
        Allow from all
        LanguagePriority en es de fr
        ForceLanguagePriority Prefer Fallback
      </Directory>
      # エラードキュメントの指定
      #    ErrorDocument (error-code) (error-document)
      ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
      ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
      ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
      ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
        ( 省略 )
      ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
    </IfModule>
    </IfModule>
  2. コンテントネゴシエーション ( モジュール mod_negotiation )

    下記の例のように、タイプマップ( type-map ハンドラで扱われるファイル)から、条件ヘッダ( Content-language および Content-type )に合致した Body ヘッダが選択され、実際の本文として読み込まれます。

    /var/www/error/HTTP_NOT_FOUND.html.var( 抜粋 )
    (省略)
    Content-language: itイタリア語の場合
    Content-type: text/html; charset=ISO-8859-1
    Body:----------it--
    (省略)
    -->----------it--
    
    Content-language: ja日本語の場合
    Content-type: text/html; charset=ISO-2022-JPコードセット JIS
    Body:----------ja-- この区切り文字から
    (省略)
    ----------ja-- この区切り文字までの間がリソースの実際の本文となる
    (省略)
  3. SSI(Server Side Includes) ( モジュール mod_include 他 )

    下記の SSI ディレクティブ(青色表示)により、動的に生成されたコンテンツを現在の HTML ページに加えます。
    尚、日本語の部分は、実際にはコードセット JIS(ISO-2022-JP)により記述されています。
    エラーメッセージの外観を決める html には、共通のヘッダとフッタが include により、読み込まれます。

    /var/www/error/HTTP_NOT_FOUND.html.var ( 上記 日本語の場合を抜粋 )
    Content-language: ja
    Content-type: text/html; charset=ISO-2022-JP
    Body:----------ja--
    <!--#set var="CONTENT_LANGUAGE" value="ja"
    --><!--#set var="CHARACTER_ENCODING" value="iso-2022-jp"
    --><!--#set var="TITLE" value="Object not found!"
    --><!--#include virtual="include/top.html" -->共通の ヘッダ・ファイル
    
        要求された URL は本サーバでは見つかりませんでした。
    
      <!--#if expr="$HTTP_REFERER" -->
    
        <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">
        参照元ページ</a>のリンクが間違っているか、古くなってしまっているようです。
        <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->"
        >ページ</a>の著者にこのエラーをお知らせ下さい。
    
      <!--#else -->
    
        もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。
    
      <!--#endif -->
    
    <!--#include virtual="include/bottom.html" -->共通の フッタ・ファイル
    ----------ja--
  4. 共通の ヘッダ・ファイル

    青色表示は SSI ディレクティブです。

    /var/www/error/include/top.html
    <!--#if expr="! $CONTENT_LANGUAGE"
    --><!--#set var="CONTENT_LANGUAGE" value="en"
    --><!--#endif
    --><!--#if expr="! $CHARACTER_ENCODING"
    --><!--#set var="CHARACTER_ENCODING" value="ISO-8859-1"
    --><!--#endif
    --><?xml version="1.0" encoding="<!--#echo var="CHARACTER_ENCODING" -->"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
     lang="<!--#echo var="CONTENT_LANGUAGE" -->"
     xml:lang="<!--#echo var="CONTENT_LANGUAGE" -->">
    <head>
    <title><!--#echo encoding="none" var="TITLE" --></title>
    <link rev="made" href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->" />
    <style type="text/css"><!--/*--><![CDATA[/*><!--*/
        body { color: #000000; background-color: #FFFFFF; }
        a:link { color: #0000CC; }
        p, address {margin-left: 3em;}
        span {font-size: smaller;}
    /*]]>*/--></style>
    </head>
    
    <body>
    <h1><!--#echo encoding="none" var="TITLE" --></h1>
    <p>
  5. 共通の フッタ・ファイル
    /var/www/error/include/bottom.html
    </p>
    <p>
    <!--#include virtual="../contact.html.var" -->
    </p>
    
    <h2>Error <!--#echo encoding="none" var="REDIRECT_STATUS" --></h2>
    <address>
      <a href="/"><!--#echo encoding="entity" var="SERVER_NAME" --></a><br />
      <span><!--#echo var="SERVER_SOFTWARE" --></span>
    </address>
    </body>
    </html>
( 最終更新日時 : 2008/08/31 21:24:48 )

Site Info

so_counter

Reference

コミットメント

SYSTEMO 宣言

お客様の喜びは、私たちの喜びです。

私たちは
道具としてのITが
お客様のお役に立つことを
心から願っています。

私たちは
SOHOビジネスを
支援します。

運営サイト

商品検索エンジンでオンラインショッピング・インターネット通販を楽しもう
商品検索エンジン【Jトレンズ】
商品検索 by Webサービス
【あいてむず】
  Webサービス ショップリンク サイト

社長Blog
アフィリエイトことはじめLabo
社員Blog
やりくり主婦の
  ほしい☆たべたい☆つかいたい