・WordPressでパーマリンクを「投稿名」にしたら記事ページにアクセスできくなった。
・「404 Not Found」エラーが表示されてしまう。
・原因と対処方法を教えてほしい。
こういった疑問に答えます。
本記事の内容
この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。
こういった私が、解説していきます。
私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。
- 本記事の内容
- WordPressでパーマリンクを「投稿名」にして、記事ページにアクセスできなくなったときの対処手順
- まとめ
WordPressでパーマリンクを「投稿名」にして、記事ページにアクセスできなくなったときの対処手順
発生した事象
設定>パーマリンク設定で「投稿名」を選択しました
トップページは正常に表示できる
記事ページが表示できない「404 Not Found エラー」
年月の記事一覧ページも表示できない「404 Not Found エラー」
カテゴリの記事一覧ページも表示できない「404 Not Found エラー」
設定>パーマリンク設定をデフォルトに「基本」に戻してみる
記事ページが表示できる
年月の記事一覧ページも表示できる
カテゴリの記事一覧ページも表示できる
原因の調査と対処手順
まずはWordPressのオンラインマニュアルを見てみます。
≫パーマリンクの使い方|WordPress.org 日本語 https://ja.wordpress.org/support/article/using-permalinks/
Pretty パーマリンクは、以下の環境で利用できます。
・Apache:mod_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 9月 22 11:07:19 sv-neptune systemd[1]: Starting The Apache HTTP Server... 9月 22 11:07:19 sv-neptune systemd[1]: Started The Apache HTTP Server. 9月 22 11:07:19 sv-neptune httpd[30611]: Server configured, listening on: port 443, port 80
修正後のエラー解消を確認
記事ページが表示できるようになった
年月の記事一覧ページも表示できるようになった
カテゴリの記事一覧ページも表示できるようになった
まとめ
WordPressでパーマリンクを「投稿名」にして、記事ページにアクセスできなくなったときの対処手順
- Apacheを使っている環境の場合、「mod_rewrite」が有効かどうか確認
- .htaccess ファイルの内容の確認
- httpd.conf ファイルに「AllowOverride All」の記載があるかを確認
- 設定確認後にApacheを再起動