Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

基本的にはこれで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がある場合

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

htaccess.png

今回、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に記述されている内容については下記を。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away