そういうのがいいブログ

SIerで働く30代サラリーマンSEがインフラエンジニアに憧れてLinux・クラウド・AWSの勉強をするブログ

WordPressパーマリンクで記事が表示ができない「404 Not Found」対処法

※[PR]当ブログの記事の中にはプロモーションが含まれています。

WordPressパーマリンクを「投稿名」にしたら記事ページにアクセスできくなった。
・「404 Not Found」エラーが表示されてしまう。
・原因と対処方法を教えてほしい。

こういった疑問に答えます。

本記事の内容

  1. WordPressパーマリンクを「投稿名」にして、記事ページにアクセスできなくなったときの対処手順

この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。

こういった私が、解説していきます。

私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。

WordPressパーマリンクを「投稿名」にして、記事ページにアクセスできなくなったときの対処手順

発生した事象

設定>パーマリンク設定で「投稿名」を選択しました

トップページは正常に表示できる

記事ページが表示できない「404 Not Found エラー」

年月の記事一覧ページも表示できない「404 Not Found エラー」

カテゴリの記事一覧ページも表示できない「404 Not Found エラー」

設定>パーマリンク設定をデフォルトに「基本」に戻してみる

記事ページが表示できる

年月の記事一覧ページも表示できる

カテゴリの記事一覧ページも表示できる

原因の調査と対処手順

まずはWordPressのオンラインマニュアルを見てみます。

≫パーマリンクの使い方|WordPress.org 日本語 https://ja.wordpress.org/support/article/using-permalinks/ 

Pretty パーマリンクは、以下の環境で利用できます。

Apachemod_rewrite モジュール有り
・Nginx:try_filesを使用 (参考サイト)
・Hiawatha Webサーバー:URLリライティングが有効
Lighttpd:404 handler あるいは mod_rewrite を使用
・Caddy:using rewrite (参考サイト)
出典:パーマリンクの使い方|WordPress.org 日本語

今回の環境では、Apacheを使っていますので、「mod_rewrite」が使える状態になっているかを確認します。

/etc/httpd/conf.modules.d/00-base.conf の確認

00-base.confに、
LoadModule rewrite_module modules/mod_rewrite.so

の記載があるかを確認します。

[root@sv-neptune conf.modules.d]# vi /etc/httpd/conf.modules.d/00-base.conf
#
# This file loads most of the modules included with the Apache HTTP
# Server itself.
#

LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_socache_module modules/mod_authn_socache.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_dbd_module modules/mod_authz_dbd.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule brotli_module modules/mod_brotli.so
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule cache_socache_module modules/mod_cache_socache.so
LoadModule data_module modules/mod_data.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
LoadModule dumpio_module modules/mod_dumpio.so
LoadModule echo_module modules/mod_echo.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule filter_module modules/mod_filter.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule info_module modules/mod_info.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule macro_module modules/mod_macro.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule remoteip_module modules/mod_remoteip.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule request_module modules/mod_request.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule status_module modules/mod_status.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule version_module modules/mod_version.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule watchdog_module modules/mod_watchdog.so

mod_rewrite.so のモジュールが存在していることを確認

/usr/lib64/httpd/modules

.htaccess ファイルの確認

WordPressのドキュメントルートにある、.htaccess ファイルの内容を確認します。

# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、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

きちんと記述されているように見えます。

バーチャルホスト用のhttpd.confファイルを確認

バーチャルホスト用のhttpd.confファイルの中に、以下を追記しました。

<Directory "/home/www/html/sv-neptune.wp">
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
</Directory>

Apacheの再起動

httpd -t
[root@sv-neptune ~]# httpd -t
Syntax OK
systemctl restart httpd
systemctl status httpd
[root@sv-neptune ~]# systemctl restart httpd
[root@sv-neptune ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           mqphp-fpm.conf
   Active: active (running) since Tue 2020-09-22 11:07:19 JST; 9s ago
     Docs: man:httpd.service(8)
  Process: 18353 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 30611 (httpd)
   Status: "Started, listening on: port 443, port 80"
    Tasks: 213 (limit: 11032)
   Memory: 31.7M
   CGroup: /system.slice/httpd.service
           tq30611 /usr/sbin/httpd -DFOREGROUND
           tq30612 /usr/sbin/httpd -DFOREGROUND
           tq30613 /usr/sbin/httpd -DFOREGROUND
           tq30614 /usr/sbin/httpd -DFOREGROUND
           mq30615 /usr/sbin/httpd -DFOREGROUND

 922 11:07:19 sv-neptune systemd[1]: Starting The Apache HTTP Server...
 922 11:07:19 sv-neptune systemd[1]: Started The Apache HTTP Server.
 922 11:07:19 sv-neptune httpd[30611]: Server configured, listening on: port 443, port 80

修正後のエラー解消を確認

記事ページが表示できるようになった

年月の記事一覧ページも表示できるようになった

カテゴリの記事一覧ページも表示できるようになった

まとめ

WordPressパーマリンクを「投稿名」にして、記事ページにアクセスできなくなったときの対処手順

  1. Apacheを使っている環境の場合、「mod_rewrite」が有効かどうか確認
  2. .htaccess ファイルの内容の確認
  3. httpd.conf ファイルに「AllowOverride All」の記載があるかを確認
  4. 設定確認後にApacheを再起動