【Wordpress】トップページ以外表示されない/特定のページが表示されない
趣旨
トップページだけは表示されるのに、他のページにアクセスすると404が出てしまう事象が発生しました。散々ググっても対処法が出てこず、2時間近くかけてようやく解決方法を見つけましたので、その手順を共有します。
なお、この解決方法は「トップページ以外表示されない」という事象のほか、「特定のページが表示されない」というものにも該当しそうです。
ご参考になれば幸いです。
結論
そもそも「.htaccess」が無効になってた。。。
環境
- CentOS 7
- Apache
- php 7.4
- Wordpress 5.7.2
解決方法① 「パーマリンク設定」でそのまま更新をかける
私がググった中で、最もメジャー(?)というか単純な解決方法です。
設定したはずのパーマリンク設定が反映されていなかったというオチですね。
やり方は、Wordpressの管理画面にて、「設定>パーマリンク設定」とクリックしていき、そのまま「変更を保存」をクリックするだけです。
私の場合、何回も繰り返しましたが、これでは無理でした。。
解決方法② 「.htaccess」を疑う
1. 「.htaccess」が有効になっているかどうかを確認
ググると「.htaccess」の中身を確認する方法が多くみられますが、私の場合は、そもそも有効になっていなかった ことが原因でした。
いくらファイルを作成・更新したところで、読み取ってくれなきゃ無理なわけです。
私の環境ではApacheを使っていますので、下記コマンドを実行し、ファイルを編集しました。
vi /etc/httpd/conf/httpd.conf
中身は色々と書いてありますが、編集する箇所は、<Directory ※></Directory >のセグメントで定義されている「AllowOverride」です。「.htaccess」が無効の場合は、「AllowOverride None」 になってますので、これを 「AllowOverride All」 に変更します。
※ 各階層ごと("/","/var/www","/var/www/html")に設定がありますが、私の場合、Wordpress関連のファイル及び「.htaccess」を置いているディレクトリは「/var/www/html」でしたので、<Directory "/var/www/html"></Directory >のセグメントを編集しました。
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
# ⇒ ここを「AllowOverride ALL」に変更
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
2. 「.htaccess」を作成 or 確認
「.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
終わりに
「.htaccess」がなぜ必要なのか、構造的に理解が足りないので、また追記します!
Discussion