Apache: カスタムエラーレスポンスの設定

Pocket

カスタムエラーレスポンスを設定すると
apacheでエラーが発生したときに表示される404ページを任意のページに変更したり、
503が起きたときのパラメタを取得することができる。
その設定方法について。

カスタムエラーレスポンスでできること

カスタムエラーレスポンスとして設定できる内容は大きく3つあります。

指定のテキストを表示
ローカルのURLにリダイレクト
外部のURLにリダイレクト

リダイレクト変数

リダイレクトの際に何かの情報を伝えるためにREDIRECT_から始まる環境変数が定義されています。

環境変数の例:


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_URL と REDIRECT_QUERY_STRING はリダイレクト先のURLに渡されます。 他の変数は、エラーや問題が起きる前に存在した場合にだけ値を持ちます。 外部リダイレクト (httpから始まるリダイレクト先はたとえ同じホストを指していても外部リダイレクトと見なされます) の場合は、これらの変数は設定されません。

設定方法

カスタムエラーレスポンスを設定するにはErrrorDocumentディレクティブを使用します。
AllowOverrideが設定されていれば.htaccessにも記述できます。

構文:

ErrorDocument <3-digit-code> 

3-digit-codeは404,500などのHTTPステータスコードを指定します。
にダブルクォーテーションで囲った文字列を指定すると、エラー発生時に指定のテキストを表示します。
/から始まるローカルのURL、またはhttpから始まる外部のURLを記述すると、エラー発生時に指定のURLにリダイレクトされます。

設定例:

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