【htaccess】403・404・500エラーのときに任意で作成したページを表示する


基本的にはこれでOK

.htaccessに下記を記述して、ルートディレクトリに.htaccesserror.htmlを設置すればOK。

.htaccess(基本な記述)
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 500 /error.html

コメントで rryu さんからご指摘がある通り、パスの指定に絶対URL(例:http://aaa.com/error.html)は記述しないでください。

理由は「ErrorDocumentを絶対URLで書くのはやめようよ」が参考になります。

上述した.htaccess(基本な記述)のように絶対URLは使わずに記述すれば、OKです。

上位階層にURLの書き換えやリダイレクトを設定する.htaccessがある場合

仮に下記のようなディレクトリ構成とします。

今回、ccc.comのエラー表示を制御したいとします。

通常であれば、前述した通りの記述でccc内に.htaccesserror.htmlを設置すれば、問題ありません。

但し、上位階層にURLの書き換えやリダイレクトを設定する.htaccessがある場合は注意が必要です。

私の場合は、www直下にWordPressが入っており、w-htaccessが下記のようにURLを書き換える記述があったため、うまく動作しませんでした。

.htaccess(w-htaccess)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

最初は解決策として、c-htaccessの記述を下記のようにすることで、問題なく動作しましたが、前述した通り、絶対URLの指定は避けた方がよいです。

.htaccess(c-htaccess):悪い例
ErrorDocument 403 http://ccc.com/error.html
ErrorDocument 404 http://ccc.com/error.html
ErrorDocument 500 http://ccc.com/error.html

ただ、最初に紹介した.htaccess(基本な記述)のようにルート相対パス(例:/error.html)で指定すると500エラーが表示されます。
エラーの原因は、w-htaccessの有効範囲です。
基本的に、.htaccessに記述した内容は、下層ディレクトリも適用範囲になります。
つまり、w-htaccessに記述した内容は、ccc内にも適用されるということです。
実際にccc内では下記の記述が適用されているということになります。

.htaccess(ccc内では上位階層のw-htaccessの記述も適用される)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 500 /error.html

上述したようにccc内でも書き換えが行われているため、500エラーが表示されます。
そのため、ccc内では書き換えを行わないように下記のようにRewriteEngineOffにすれば、問題なく任意のエラーページが表示されるようになります。

.htaccess(c-htaccess):解決策
RewriteEngine Off
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 500 /error.html

私は、上述した方法で解決しましたが、もっとスマートな方法があれば、教えてくださいm(__)m

参考サイト

.htaccessの基本的なことについて解説。

.htaccessのrewriteについては下記を。

WordPressの.htaccessに記述されている内容については下記を。