#基本的にはこれで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
に記述されている内容については下記を。