Xサーバーでカスタム404ページを設定するときの注意点

アクセスするユーザーが存在しない時に表示されるエラーページ。エックスサーバーの場合だと下記のようなエラーページが表示されます。

ファイルが存在しない時に表示する404エラーのページ。
2013-05-28-a

エックスサーバーのエラーページじゃなく、自分で用意したカスタム404ページを用意する方も多いと思います。せっかく来てくれたアクセスを逃がしたくはありませんし、カスタムページを用意することでユーザーを誘導できますからね。自分もそんな一人でした。

カスタム404ページへ誘導するために、.htaccessを用意して下記のようにコードを記述します。

ErrorDocument 404 /notfound.html

存在しないURLにアクセスすると、上記のサンプルだと「notfound.html」に転送されます。ステータスコードも404となりソフト404を避けることができます。

これで十分かと思いきや、エックスサーバーの場合(他のサーバーも同様かもしれませんが・・・)この状態だと実は不十分だったりします。

存在しないサブディレクトリのTOPは404を返さない

大抵のレンタルサーバーでは、index.htmlやindex.phpなど、indexとつくファイル名はデフォルトドキュメント、要はURLを書くときに省略できる仕様になっていると思います。

運営しているサイト内にサブディレクトリを展開している場合、

http://www.aaa.net/subdir/

みたいなURLが存在することと思います。このサブディレクトリのURLが存在しない場合、エックスサーバーはステータスコードを404ではなく、403を返します。

こんな感じ。
2013-05-28-b

ステータスコードが違うためカスタム404ページには転送されません。同じ存在しないURLでも、ディレクトリのTOPかファイルのURLかでエラーが変わるんですね。

できれば存在しないサブディレクトリのURLでもカスタムページに転送したいです。解決策は簡単で、下記のようにErrorDocumentを2行書けば大丈夫です。

ErrorDocument 403 /notfound.html
ErrorDocument 404 /notfound.html

存在しないURLにアクセスされたときに、指定したステータスコードになっているかどうかのチェックは下記のサイトが便利です。

ステータスコードチェッカー

エックスサーバー以外でも存在しないサブディレクトリURLにアクセスした際にカスタムページに転送されない場合は、ステータスコードを確認して上記のように.htaccessを設定すると良いでしょう。