Apacheが出力する 404 not found の画面が表示され、WordPressで用意してある 404.php の内容が表示されないときのTipsです。
環境
Debian GNU/Linux 7.0 wheezy
kernel 3.2.0-4-amd64
apache2 2.2.22-13+deb7u7
WordPress 4.5.3-ja (BizVektor 1.8.22)
私が構築した環境ではリンク先が存在しないURLを指定すると、Apacheの標準エラー画面が表示される状態でした。
Not Found
The requested URL /xxx was not found on this server.
Apache Server at www.lonnie.co.jp Port 80
WordPressが動いている環境では、404.php が動くはずなのですが…
.htaccessが存在しなかったので、作成してみました。
# BEGIN WordPress <IfModule mod_rewrite.c>; RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress ErrorDocument 404 /index.php?error=404
何も状況は変化しません。
ひょっとして mod_rewrite が動いていないのかも?と思い、
# a2enmod rewrite
Module rewrite already enabled
…という返事が返ってきます。
Apacheの設定に問題があるかもしれないので、/etc/apache2/sites-available/default の内容を確認します。
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews #AllowOverride None AllowOverride all Order allow,deny allow from all </Directory>
問題はなさそうです。
※ちゃんと none を all に変更してあります。
以上の検証から.htaccessを使って 404.php を動かすのは諦めました。
結局、/etc/apache2/conf.d/localized-error-pages を変更しました。
【変更前】
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
【変更後】
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
ErrorDocument 404 /index.php?error=404
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
この変更後、# apache2ctl graceful でサービスの再起動をかけると無事 404.php が動き、WordPress からエラー画面が表示されるようになりました。
【追記】2016/09/03
その後、いくつかのプラグインをインストールしたせいか、/var/www に .htaccess が出来上がっていて、なかを覗くと色々な設定が書かれています。
しかも、ErrorDocument 404 /index.php?error=404 の設定が入っていなくても、404.php が動作するようになりました。念の為、上記にある /etc/apache2/conf.d/localized-error-pages の変更を元通り(コメントアウト状態)にしても、404.php は普通に動作します。もちろん、これが正常なのですが… もしかすると8/16にWordPressのバージョンが4.6に上がったときに正常な状態に戻ったのかもしれません。
- 投稿タグ
- WordPress