WordPressでトップページ以外が404エラーになる

WordPressでトップページ以外が404エラーになる WordPress

管理画面の設定->パーマリンクの設定をデフォルトから変更したところ、トップページ以外にアクセスすると404以外になってしまいました。

この記事は、WordPressのWEBサーバにapacheを使用している場合を想定しています。

.htaccess

パーマリンクの設定がデフォルトだと、WordPressのルートディレクトリ(wp-config.phpがある場所)にある.htaccessは#BEGINと#ENDの間は何も表示されません。


# BEGIN WordPress
# END WordPress

デフォルトの設定から変更すると、.htaccessの中身が自動的に変更されます。

何をしているか簡単に説明しますと、「WordPressではindex.phpでURL解析がされますので、指定されたパスのページが存在しない場合は、index.phpにアクセスを集める」です。

index.phpが特定ページへとアクセスを振り分けてくれます。


# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


# END WordPress

.htaccessが更新されない場合は、apacheが.htaccessを更新する権限がない可能性があります。

WordPressを置いているディレクトリのユーザとグループの所有者がapacheになっているか確認してください。私の環境では/var/www/html/にWordPressを置いていますが、各々の環境に置き換えてください。


ls -la /var/www/html/


rootなど他のユーザになっている場合はapacheに変更してください。


sudo chown -R apache:apache /var/www/html/


mod_rewrite

.htaccessが動作するためにはapcheでは、mod_rewriteが有効化されている必要があります。

/etc/httpd/conf/httpd.confを確認してください。


LoadModule rewrite_module modules/mod_rewrite.so

上記の記載があればOKです。

最近のapacheですと、httpd.confには、


Include conf.modules.d/*.conf 

と書いてあるだけかもしれません。その場合、


find /etc/httpd/conf.modules.d/ -name "*.conf" | xargs grep "rewrite_module"

を実行し、mod_rewriteが有効化されているか確認してください。

AllowOverride

/etc/httpd/conf/httpd.confの<directory "/var/www/html" >の部分を確認してください。

AllowOverride Noneとなっています。こちらが問題でした。AllowOverride Allに変更し、apacheを再起動したところ、トップページ以外も無事表示されました。

WordPressに対応しているレンタルサーバを使用している場合は、このようなことは発生しないと思いますが、一から環境を作成する場合には注意が必要です。


<directory "/var/www/html" >
    #AllowOverride None
    AllowOverride All

sudo systemctl restart httpd
タイトルとURLをコピーしました