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