⛑️

【Wordpress】トップページ以外表示されない/特定のページが表示されない

2021/08/31に公開

趣旨

トップページだけは表示されるのに、他のページにアクセスすると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