基本的にはこれでOK
.htaccessに下記を記述して、ルートディレクトリに.htaccessとerror.htmlを設置すればOK。
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内に.htaccessとerror.htmlを設置すれば、問題ありません。
但し、上位階層にURLの書き換えやリダイレクトを設定する.htaccessがある場合は注意が必要です。
私の場合は、www直下にWordPressが入っており、w-htaccessが下記のようにURLを書き換える記述があったため、うまく動作しませんでした。
# 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の指定は避けた方がよいです。
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内では下記の記述が適用されているということになります。
# 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内では書き換えを行わないように下記のようにRewriteEngineをOffにすれば、問題なく任意のエラーページが表示されるようになります。
RewriteEngine Off
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 500 /error.html
私は、上述した方法で解決しましたが、もっとスマートな方法があれば、教えてくださいm(__)m
参考サイト
.htaccessの基本的なことについて解説。
.htaccessのrewriteについては下記を。
WordPressの.htaccessに記述されている内容については下記を。
