カスタムエラーレスポンス

目的
追加機能の提供。ウェブマスターが何らかのエラーや問題に対する Apache の反応を 設定できるようにします。

サーバがエラーや問題を発見した場合の反応を、 カスタマイズして定義することができます。

例えば、スクリプトの実行が失敗して "500 Server Error" を発生させたとします。 この場合の反応を、より好ましいテキストや、別の URL (内部及び外部) へのリダイレクションに 置き換えることができます。

古い動作
NCSA httpd 1.3 は、古くて退屈なエラー/問題メッセージを返していました。 それはしばしばユーザには無意味であり、 またそれを発生させた原因を記録する方法も提供していませんでした。
新しい動作
  1. NCSA のハードコードされたメッセージの代わりに他のテキストを表示
  2. ローカルの URL にリダイレクト
  3. 外部の URL にリダイレクト
するようにサーバを設定できます。

別の URL にリダイレクトすることは役に立ちますが、 それは説明をしたり、より明確に誤り/問題を記録したりするために 何か情報を伝えられるときに限ります。

これを実現するために、 Apache は新しく CGI のような環境変数を定義します。 例えば以下のようなものがあります。

REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap, image/jpeg
REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05 9000/712)
REDIRECT_PATH=.:/bin:/usr/local/bin:/etc
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=ooh.ahhh.com
REDIRECT_SERVER_NAME=crash.bang.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/0.8.15
REDIRECT_URL=/cgi-bin/buggy.pl

頭に付く REDIRECT_ に注目してください。

少なくとも REDIRECT_URLREDIRECT_QUERY_STRING は 新しい URL (CGI スクリプトか CGI インクルードであると仮定されます) に渡されます。 他の変数は、エラーや問題が起きる前に存在した場合にだけ存在します。 もしあなたの設定した ErrorDocument が 外部リダイレクト (すなわちhttp: のような体系名から始まるすべてのもの。 たとえ同じホストを指していても) ならば、 これらはまったく設定されません。

設定
"FileInfo" オーバーライドが許可されていれば、 .htaccess ファイルで "ErrorDocument" を使用することができます。

ここに、いくつかの例を挙げます。

ErrorDocument 500 /cgi-bin/crash-recover ErrorDocument 500 /cgi-bin/crash-recover
ErrorDocument 500 "Sorry, our script crashed. Oh dear
ErrorDocument 500 http://xxx/
ErrorDocument 404 /Lame_excuses/not_found.html
ErrorDocument 401 /Subscription/how_to_subscribe.html

構文

ErrorDocument <3 桁コード> 動作

動作は、

  1. 表示されるべきテキスト。テキストには引用符 (") をつけます。 引用符の後に続くものが何でも表示されます。 注意 : (") は表示されません
  2. リダイレクト先の外部 URL
  3. リダイレクト先のローカル URL


カスタムエラーレスポンスとリダイレクト

目的
スクリプト/SSI に追加の環境変数が利用可能になるように、 リダイレクトされた URL に対する Apache の動作が変更されました。
古い動作
リダイレクトされたスクリプトは標準の CGI 環境変数を利用可能でした。 しかし、どこからリダイレクトされたかの情報は提供されていませんでした。
新しい動作
リダイレクトされた先のスクリプトが使用可能なように、新しいたくさんの環境変数が初期化されます 新しい変数は、それぞれ REDIRECT_ で始まります。 REDIRECT_ で始まる環境変数は リダイレクトされる前に存在していた CGI 環境変数の頭に REDIRECT_ を付けて作成されます。 すなわちHTTP_USER_AGENTREDIRECT_HTTP_USER_AGENT になります。 これらの新しい変数に加えて、Apache は、 スクリプトがリダイレクト元のトレースを助けるために REDIRECT_URLREDIRECT_STATUS を定義します。 アクセスログには元の URL とリダイレクトされた URL の両方が記録されます。

ErrorDocument が CGI スクリプトへのローカルリダイレクトを指定している場合は、 それを起動することになったエラーコンディションをクライアントまで伝えられることを 確実にするために "Status:" ヘッダを含むべきです。 例えば、ErrorDocument 用の Perl スクリプトは以下のようなものを含むかもしれません。

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

スクリプトが 404 Not Found のような 特定のエラーコンディションを扱うためだけに使われる場合は、 代わりに特定のコードとエラーテキストを使用することができます。