エラーページを指定する

Apache Webサーバーの設定ファイルである.htaccessを使って、各種エラーページを設定する方法をご紹介します。

独学!未経験からWebデザイナーになる!! > テクニカルノート > .htaccessの設定 > エラーページを指定する

エラーページを指定する

Apacheは、各種エラーが発生するとエラーページを表示します。例えば、存在しないファイルへアクセスした場合などが代表的ですね。ファイルが見つからない旨の素っ気ないエラーメッセージを目にしたことがある方も多いと思います。

これ以外にも、サーバへのアクセスが拒否されたときや、認証が失敗したとき、サーバの内部エラーが発生したときなど、様々なエラーページが存在します。本ページでは、これらのエラーが発生した際に独自のエラーページを表示する設定方法についてご紹介します。

セキュリティ上の問題や基本的なエラーを避けるため、.htaccessの前知識として当ディレクトリTOPページ内にある、.htaccessの基本も併せてお読みください。

.htaccessへの指定方法

基本的な文法は下記の通りです。とっても簡単ですね。通常はこの指定をした.htaccessファイルを、ドキュメントルート以上に配置します。

ErrorDocument [ HTTPステータスコード ] [ ファイル名 ]

それでは具体例を見てみましょう。

指定例1-公開ディレクトリからの絶対指定

一般的な指定方法です。サーバの公開ディレクトリを意味する[ / ]からファイルを指定していますので、公開ディレクトリにそれぞれのファイルを置けば、エラー時に該当のファイルが呼び出されます。なお、ファイル名は自由に決めてかまいません。

# 認証に失敗したとき
ErrorDocument 401 /401.htm

# アクセスが拒否されたとき
ErrorDocument 403 /403.htm

# ファイルが見つからなかったとき
ErrorDocument 404 /404.htm

# 内部エラーが発生したとき
ErrorDocument 500 /500.htm

ちなみに、実際にエラーページが表示される際、ブラウザのアドレスバーには上記ファイル名(404.htm)は見えません。アクセスしたURIが表示されたままです。

指定例2-URI指定

下記のように、401エラー以外は、ファイル名はURI指定でもOKです。ただしこの場合は、アドレスバーに指定したURIにリダイレクト(転送)されてしまいます。基本的には指定1の方をお勧めします。

# 認証に失敗したとき(401のみはURI指定はNGです)
ErrorDocument 401 /401.htm

# アクセスが拒否されたとき
ErrorDocument 403 http://www.hogefoobar.co.jp/403.htm

# ファイルが見つからなかったとき
ErrorDocument 404 http://www.hogefoobar.co.jp/404.htm

# 内部エラーが発生したとき
ErrorDocument 500 http://www.hogefoobar.co.jp/500.htm

ファイルサイズが小さすぎると正しく表示されない

実は、指定方法が正しくても、エラーページとして指定するファイルのサイズが小さすぎると正しく表示されない場合があります。なぜなら、ブラウザによってはファイルサイズが小さすぎると、ブラウザのデフォルトエラーページに置き換えてしまうことがあるからです。少なくともファイルサイズを1kb以上にしておくとよいでしょう。

公開ディレクトリからの絶対指定をする際の注意点

先ほどの指定例1でエラーページを指定する場合、ちょっとした問題が発生することがあります。それは、エラーページのファイル内で、相対指定のパスを利用しているときです。

例えば、404エラーファイル(ここでは公開ディレクトリに置いた404.htmとします)の中に、下記のように画像があったとします。

<img src="img/logo.gif" />

上記画像は、Dreamweaverなどのエディタで404.htmを開いたときに、デザインビューでリンクが正しくできています。実際に、404.htmをDreamweaverでブラウザプレビューしても表示されるでしょうし、下記のように存在しないページにアクセスしても、きちんと404.htmと画像は表示されています。

http://www.hogefoobar.co.jp/存在しないページ.html

しかし、次のようにしてみるとどうでしょうか。

http://www.hogefoobar.co.jp/a/存在しないページ.html

おそらく画像が表示されなかったと思います。それはなぜでしょうか。アドレスバーに表示されたURIを見ると理解できます。アドレスバーには当然、http://www.hogefoobar.co.jp/a/存在しないページ.html とあるはずです。

http://www.hogefoobar.co.jp/a/存在しないページ.html ページから404.htmが読み込まれるわけですから、その中で<img src="img/logo.gif" />を呼び出すと、ブラウザはhttp://www.hogefoobar.co.jp/a/img/logo.gifを探してしまうのです。

これを回避するには、絶対URIでパスを指定するか、もしくは公開ディレクトリからの絶対パス指定にすれば問題は解決します。下記のような感じですね。

<img src="/img/logo.gif" />
または
<img src="http://www.hogefoobar.co.jp/img/logo.gif" />

なお、当然ですがこの問題は画像だけでなく、パス指定されているもの全てにあてはまります。エラーページは、基本的に公開ディレクトリからの絶対パスで作る、と覚えておくといいでしょう。

↓もし参考になりましたら、シェアしていただけると嬉しいです(^-^)

12/06/30 facebookページ開設しました。RSS代わりにも使いたいと思います。

コメント

この記事へのコメントはまだありません。

テクニカルノート
環境環境のインストール
Apacheのインストール for Windows
XAMPPのインストール for Windows
MAMPのインストール for Mac
Perl(ActivePerl)のインストール for Windows
PHPのインストール for Windows
MySQLのインストール for Windows
PostgreSQLのインストール for Windows
テスト用Webサーバーの設定
外部からのアクセスを制限する
ドキュメントルートを変更する
バーチャルホストを設定する
.htaccessを有効にする
CGIを有効にする
.htaccessの設定
├エラーページを指定する
特定のファイル・ディレクトリのアクセスを拒否する
簡易的なユーザ認証をする