エラーメッセージのカスタマイズ

Apache2のエラー画面をカスタマイズする方法です。デフォルトのエラー画面はやや味気ない。できれば続けて何らかの情報を提示したいなどいろいろなファイルをエラー画面に適用することができます。ここでは.htaccessファイルの設定ではなくて、apache.confでもってWebサーバー全体のエラー画面をカスタマイズする方法です。設定しておきたい主なエラーコードは以下の通りです。

Code Error 説明
401 Unauthorized 認証に失敗(ID、パスワードのタイプミスなど)
403 Forbidden リソースへのアクセスを拒否(許可されていないディレクトリにアクセスしようとしたなど)
404 Not Found リソース(ファイル)が存在しない(URLタイプミスなど)
500 Internal Server Error スクリプトのエラーで実行できない(CGIエラーなど)
501 Not Implemented リクエストを処理できる機能がない

apache2.confの設定(あるいは、httpd.contの設定)

apache2.confの設定でもってそのWebサーバー全体のエラー画面をカスタマイズできます。/etc/apache2/apache2.confをエディタで開いて以下のようにディレクティブを追加します。
ErrorDocument 401 /error/401.html
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html
ErrorDocument 501 /error/501.html

ここでの文法は、
<エラー画面のディレクティブ> <エラーコード> <ファイルパス>
(例)ErrorDocument 501 /error/501.html

となっています。それぞれ半角スペースで区切ります。またファイルパスはドキュメントルートからの絶対パスになります。相対パスを指定するとサブディレクトリではパスが通らなくなります。また/homeまたは/からのフルパスで指定するとダメです。ErrorDocument 501 "/error/501.html"という風にダブルクォークで囲むのもダメです。この場合は指定のファイルではなく囲まれた文字列がそのまま表示されてしまいます。
この場合は、DocumentRootが/home/user/public_htmlに設定されている場合、/home/user/public_html/error/401.htmlというファイルがエラー時に読み出されるということになります。
また、エラー画面のファイルはhtmlだけではなくてPHPやPerlなどのスクリプトを利用することもできます。設定方法は通常のスクリプトファイルと同様です。設定後はAoacheを再起動します。(# /etc/init.d/apache2 restart)

バーチャルホストのエラー画面

Webサーバー全体のエラー画面の設定をしてもどうしてだかバーチャルホストのエラー画面には反映されません。バーチャルホストはバーチャル(仮想的)なホスト(主)なだけでにWebサーバーの設定とは個別に機能している部分があるわけです。エラー画面もその一つです。バーチャルホストディレクティブ内に、
# user
<VirtualHost *:80>
ServerAdmin user@omnioo.com
DocumentRoot /home/user/public_html
ServerName user.omnioo.com

ErrorDocument 401 /error/401.html
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html
ErrorDocument 501 /error/501.html
</VirtualHost>

というように設定します。ここでも同様にバーチャルホストのDocumentRootからの絶対パスということなのでパス設定に注意します。設定後はApacheの再起動を忘れずに。
すべてのエラーコード(RFC2068抜粋)
10.1.1 100 Continue ....................................54
10.1.2 101 Switching Protocols .........................54
10.2 Successful 2xx ....................................54
10.2.1 200 OK ..........................................54
10.2.2 201 Created .....................................55
10.2.3 202 Accepted ....................................55
10.2.4 203 Non-Authoritative Information ...............55
10.2.5 204 No Content ..................................55
10.2.6 205 Reset Content ...............................56
10.2.7 206 Partial Content .............................56
10.3 Redirection 3xx ...................................56
10.3.1 300 Multiple Choices ............................57
10.3.2 301 Moved Permanently ...........................57
10.3.3 302 Moved Temporarily ...........................58
10.3.4 303 See Other ...................................58
10.3.5 304 Not Modified ................................58
10.3.6 305 Use Proxy ...................................59
10.4 Client Error 4xx ..................................59
10.4.1 400 Bad Request .................................60
10.4.2 401 Unauthorized ................................60
10.4.3 402 Payment Required ............................60
10.4.4 403 Forbidden ...................................60
10.4.5 404 Not Found ...................................60
10.4.6 405 Method Not Allowed ..........................61
10.4.7 406 Not Acceptable ..............................61
10.4.8 407 Proxy Authentication Required ...............61
10.4.9 408 Request Timeout .............................62
10.4.10 409 Conflict ...................................62
10.4.11 410 Gone .......................................62
10.4.12 411 Length Required ............................63
10.4.13 412 Precondition Failed ........................63
10.4.14 413 Request Entity Too Large ...................63
10.4.15 414 Request-URI Too Long .......................63
10.4.16 415 Unsupported Media Type .....................63
10.5 Server Error 5xx ..................................64
10.5.1 500 Internal Server Error .......................64
10.5.2 501 Not Implemented .............................64