ErrorDocumentディレクティブ:エラー発生時に表示するメッセージを変更する

ErrorDocument ディレクティブはエラーが発生した時に表示するメッセージを任意のテキストに変更したり、あらかじめ作成しておいた Web ページを表示するように変更するときに使用します。ここでは Apache の ErrorDocument ディレクティブの使い方について解説します。

(Last modified: )

ErrorDocumentディレクティブの使い方

ErrorDocument ディレクティブは Apache でエラーが発生したときに、クライアントへ返すメッセージをデフォルトのものから変更する場合に使用します。書式は次のとおりです。

ErrorDocument エラーコード エラーメッセージ

記述できる場所は httpd.conf, VirtualHost, Directory, .htaccess です。 .htaccess で設定する場合は AllowOverride FileInfo が設定されている必要があります。

エラーコードに指定したエラーが発生した場合に、エラーメッセージに設定したテキストを表示します。またエラーメッセージには作成済の Web ページの URL を指定することもできます。

エラーコードには例えば次のようなものがあります。(HTTP レスポンスステータスコードの一覧については「HTTP レスポンスステータスコード - HTTP | MDN」などを参照されてください)。

403 Forbidden
404 Not Found
500 Internal Server Error
503 Service Unavailable

例えばリクエストしたページが見つからないときに発生する 404 エラーの場合、デフォルトではブラウザに次のように表示されます。

ErrorDocumentディレクティブの使い方(1)

ErrorDocument ディレクティブを実際に設定した場合にどのように表示されるのかは、このあとで解説します。

httpd.conファイルでの記述

httpd.conf ファイルにはデフォルトで次のように記述されています。

#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#

デフォルトでは ErrorDocument ディレクティブに関する明示的に設定は行われていません。

エラーが発生したときに指定したテキストを表示する

404 エラーに対して任意のテキストを設定する場合は次のように httpd.conf に記述します。

ErrorDocument 404 "Sorry, This page is note foud."

httpd.conf ファイルを保存し、 Apache を再起動してください。そのあとであらためて存在しないページへアクセスすると、 ErrorDocument ディレクティブに設定したテキストが表示されます。

エラーが発生したときに指定したテキストを表示する(1)

なお表示されるテキストは変わっていますが、 HTTP ステータスコードとしては 404 が返ってきていることに変わりはありません。

エラーが発生したときに指定したテキストを表示する(2)

エラーが発生したときに指定したページの内容を表示する

404 エラーに対して同じサーバ内の別のページの内容を表示する場合は次のように httpd.conf に記述します。

ErrorDocument 404 /error/404.html

今回は表示するページとして、ドキュメントルートの中の error ディレクトリにある 404.html ページを指定しました。表示するページの URL はドキュメントルートからのパスで指定してください。

今回は error/404.html に次のような HTML ファイルを用意しました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>404 Not Found</title>
</head>
<body>

<h1>404 Not Found</h1>

<p>リクエスト頂いたページは見つかりません。</p>
<p>申し訳ありません。</p>

<img src="/error/sorry.png" style="margin-left:100px;">

</body>
</html>

httpd.conf ファイルを保存し、 Apache を再起動してください。そのあとであらためて存在しないページへアクセスすると、 ErrorDocument ディレクティブに設定したページの内容が表示されます。

エラーが発生したときに指定したページの内容を表示する(1)

ブラウザのアドレスバーに表示されている URL はもともとクライアントが指定した URL のままです。指定したページにリダイレクトして表示しているのではなく、エラーを伝えるコンテンツとして指定したページに記載された内容を読み込んで表示しています。(そのため、ページ内で画像を表示する場合、リクエストがあった URL が起点のページとなります。画像ファイルを相対パスで指定する場合は注意してください)。

なお設定したページの内容が表示されていますが、 HTTP ステータスコードとしては 404 が返ってきていることに変わりはありません。

エラーが発生したときに指定したページの内容を表示する(2)

エラーが発生したときに外部のサイトのページへリダイレクトする

404 エラーに対して外部のサイトにあるページへリダイレクトして表示する場合は次のように httpd.conf に記述します。

ErrorDocument 404 http://www.example.com/error.html

リダイレクトする外部のサイトの URL を指定してください。

httpd.conf ファイルを保存し、 Apache を再起動してください。そのあとであらためて存在しないページへアクセスすると、 ErrorDocument ディレクティブに設定した URL のページが表示されます。

エラーが発生したときに外部のサイトのページへリダイレクトする(1)

なお外部のサイトのページを指定する場合は注意が必要です。クライアントへは本来の HTTP ステータスコードである 404 ではなく、指定した外部のサイトのページへのリダイレクトを表す HTTP ステータスコードが返されます。

エラーが発生したときに外部のサイトのページへリダイレクトする(2)

-- --

Apache の ErrorDocument ディレクティブの使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。