23
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-12

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

23
30
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?