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

### Apache HTTP Server

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

目的
  追加機能の提供。ウェブマスターが何らかのエラーや問題に対する 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_URL` と `REDIRECT_QUERY_STRING` は新しい URL (CGI スクリプトか CGI インクルードであると仮定されます) に渡されます。 他の変数は、エラーや問題が起きる前に存在した場合にだけ存在します。 もしあなたの設定した ErrorDocument が 外部リダイレクト (すなわち、`http:` のような体系名から始まるすべてのもの。たとえ同じホストを指していても) ならば、これらはまったく設定されません。

設定
  "FileInfo" オーバーライド が許可されていれば、.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 桁コード> 動作

  動作は、

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

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

目的
  スクリプト/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` のような 特定のエラーコンディションを扱うためだけに使われる場合は、 代わりに特定のコードとエラーテキストを使用することができます。

### Apache HTTP Server