.htaccess活用法(7)

.htaccess(拡張子がhtaccessということで、ドットが必要です。ファイル名がないので最初戸惑いますが、こういうものだと思ってください。)が利用可能だと、

7.「ページが見つかりません」ページのカスタマイズ

インターネットで左のような「ページが見つかりません」に出くわす例は非常に多いです。しかし、このブラウザが吐き出すエラーメッセージ(左の画像はインターネットエクスプローラ6.0のもの)はブラウザによって違うとはいうものの、どれも味気ないものばかりです。また、せっかくアクセスしてくれたユーザーを逃してしまうことになります。

ページ更新の中で、ディレクトリー構造などを更新することはままあることですが、検索エンジン経由などでアクセスしてくれた人が、このような味気ないエラーメッセージを見て、そそくさとバックボタンで戻ってしまっては、もったいない話です。そこで、カスタマイズされたエラーメッセージを表示してみます。方法は簡単です。

カスタマイズされたエラーページを準備し、サーバにアップします。ここでは、file_not_found.htmlとします。
.htaccessで

ErrorDocument 404 http://www.shtml.jp/htaccess/file_not_found.html

と書くだけです。もしくは、

ErrorDocument 404 /htaccess/file_not_found.html

と書きます。後者の書き方であれば、ブラウザのアドレス欄に表示されるURLは元のURLがそのまま表示されますが、前者の書き方では、アドレス欄に表示されるURLは「http://www.shtml.jp/htaccess/file_not_found.html」になってしまいます。後者の書き方をする場合は、その.htaccessが置かれているディレクトリーから見た相対パスを書くのではなく、DocumentRootから見た絶対パスを記します。

この「404」とは、ステータスコードと呼ばれるもので、ブラウザなどであるページにアクセスすると、サーバが返す3桁の数字です。「404」は「そんなファイルないよ」というコードで、恐怖の大王「Internel Server Error」(内部サーバエラー)は「500」だ。.htaccessを使ったBasic認証で失敗した際に表示される「Unauthorized」は「401」だ(Basic認証については、こちらの章を参照してください)。その他、ディレクトリー内のファイル一覧を表示する機能をoffにしている場合に、スラッシュ止めでアクセスがあった場合や、.htaccessでIPアドレスによるシャットダウン処理などの結果、入室を認めない際に表示するメッセージは「Forbidden」で、ステータスコードは403になります。その他のステータスコードについては、多数のコンピュータ用語の意味を調べることができるe-wordsを参照してください。

ですから

ErrorDocument 403 http://www.shtml.jp/htaccess/forbidden.html

と書けば、カスタマイズされたアクセスエラー・メッセージを表示させることが可能になるわけです。

を設置してみました。「http://www.shtml.jp/htaccess/abc.html」という存在しないURLにアクセスしてもらいます。 (http://www.shtml.jp/htaccess/xyz.html)でも同じカスタマイズ・エラーメッセージが表示されることを確認してください。

--広告--
【PR】 あるある大辞典などTV関連本

【PR】 パソコン・デジカメ・DVDレコーダーなどデジタル家電もAmazon.co.jp

【PR】 データベース(PostgreSQLやMySQL)が利用可能なレンタルサーバ


仮に、「あなたがアクセスしたhttp://www.●●.com/xxx.htmlは存在しません」のようにURLも表示させたいのなら、Javascriptのdocument.URLなどで可能なはずですが、サニタイジングをしっかりやっておかないとクロスサイトスクリプティングなどの問題が発生する可能性もありますので注意してください。悪意のあるJavascriptが実行されるようなURLを人為的に作成し、わざとカスタマイズ・エラーページを表示させる、そのJavascriptを実行させるような攻撃もありえます。

実際、この種の「ページが見つかりません」表示プログラムにこの種の脆弱性が見つかり、問題になったことがあります。
参照:「複数ベンダーのJava サーブレットコンテナにクロスサイトスクリプティング脆弱性

話を元に戻します。このようなカスタマイズされたエラーメッセージを準備しておいて、思わぬ所産を得たことがあります。それは予め、カスタマイズされたエラーメッセージにアクセスログを集計するタグを仕込んでおき、どのページにアクセスした際にこのエラーメッセージが表示されたか、その参照元(Referer。リンク元)を集計することで、このようなエラーメッセージが表示される回数自体を減らすことに成功したことがあります。

私の場合、404エラーが発生していたケースは、ディレクトリー構造の変更に伴うものやコンテンツ自体の削除に伴うものもありましたが、単純なスペルミスの場合も結構ありました。アルファベット一文字でも前後が入れ替わってしまうと、それだけで接続不能になり、何十件、何百件もの「ページが見つかりません」エラーが生じえます。もったいない話です。このカスタム・エラーページで、そのようなエラー自体を減らすことが可能です。もちろん、Apacheの生ログを見ることができるのであれば、このようなカスタマイズ・ページに頼らずとも良いのですが、Apacheの生ログを見るのは大変ですので、この手法はかなり使えると思います。


▼ ErrorDocument ディレクティブ
http://httpd.apache.org/docs/mod/core.html#errordocument

次のページでは、.htaccessが実は文字化け対策に使える・あるいは必須の機能とも言えるぐらいに強力であることを例示したいと思います。