Apache HTTP サーバ バージョン 2.2
ウェブマスターが何らかのエラーや問題に対する Apache の反応を設定できるようにする追加機能を提供します。
サーバがエラーや問題を発見した場合の反応を、 カスタマイズして定義することができます。
スクリプトの実行が失敗して "500 Server Error" を発生させたとします。この場合の反応を、より好ましいテキストや、別の URL (内部及び外部) へのリダイレクションに置き換えることができます。
NCSA httpd 1.3 は、古くて退屈なエラー/問題メッセージを 返していました。それはしばしばユーザには無意味であり、 またそれを発生させた原因を記録する方法も提供していませんでした。
するようにサーバを設定できます。
別の 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:
のような体系名から始まるすべてのもの。たとえ同じホストを指していても)
ならば、これらはまったく設定されません。
AllowOverride
が適切に設定されていれば、
.htaccess ファイルで ErrorDocument
を使用することができます。
ここに、いくつかの例を挙げます。
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-digit-code> <action>
action (動作) は、
スクリプト/SSI に追加の環境変数が利用可能になるように、 リダイレクトされた URL に対する Apache の動作が変更されました。
リダイレクトされたスクリプトは標準の CGI 環境変数を利用可能でした。しかし、どこからリダイレクト されたかの情報は提供されていませんでした。
リダイレクトされた先のスクリプトが使用可能なように、
新しいたくさんの環境変数が初期化されます。新しい変数は、それぞれ
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
のような
特定のエラーコンディションを扱うためだけに使われる場合は、
代わりに特定のコードとエラーテキストを使用することができます。