サーバがエラーや問題を発見した場合の反応を、 カスタマイズして定義することができます。
例えば、スクリプトの実行が失敗して "500 Server Error" を発生させたとします。この場合の反応を、より好ましいテキストや、別の 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_URL
と
REDIRECT_QUERY_STRING
は新しい URL (CGI スクリプトか
CGI インクルードであると仮定されます) に渡されます。
他の変数は、エラーや問題が起きる前に存在した場合にだけ存在します。
もしあなたの設定した ErrorDocument が 外部リダイレクト
(すなわち、http:
のような体系名から始まるすべてのもの。たとえ同じホストを指していても)
ならば、これらはまったく設定されません。
ここに、いくつかの例を挙げます。
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 桁コード> 動作
動作は、
REDIRECT_
で始まります。
REDIRECT_
で始まる環境変数はリダイレクトされる前に存在していた
CGI 環境変数の頭に REDIRECT_
を付けて作成されます。
すなわち、HTTP_USER_AGENT
は
REDIRECT_HTTP_USER_AGENT
になります。
これらの新しい変数に加えて、Apache は、
スクリプトがリダイレクト元のトレースを助けるために
REDIRECT_URL
と REDIRECT_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 のような 特定のエラーコンディションを扱うためだけに使われる場合は、 代わりに特定のコードとエラーテキストを使用することができます。