WordPressのパーマリンク設定時に404になってしまった場合に確認すること

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 WordPressでは設定画面で記事パーマリンクURLを変更することができます。 このパーマリンクの設定は、WordPressの初期設定の際に設定しますが、このパーマリンクの設定を変更したら記事にアクセスできなくなったというトラブルを稀に聞きます。 本稿では、WordPressのパーマリンクの設定を変更した際に、記事が 404 Not Found になりアクセスできなくなった場合に確認すべきことについて解説します。

原因

 まずは原因から解説します。 WordPress をインストールした際に、その最上ディレクトリにファイル .htaccess があり、その中に次のような設定が記述されています。 .htaccess の次の設定が、パーマリンク機能の実現に機能していることを認識しておいてください。

# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

 記事ページが 404 Not Found となる場合、次のことが原因であることが多いでしょう。

  1. WEBサーバーの mod_rewrite が有効になっていない
  2. WordPressの設置ディレクトリに対して .htaccess で設定を上書きすることが許されていない

 これら2つのことについて、それぞれ解説していきます。

解決方法

1. mod_rewrite の確認

 1つ目の原因として考えられるのは、WordPressが動作しているWEBサーバー(Apache httpd)の mod_rewrite 機能が有効になっていない場合です。 上記の .htaccess<IfModule mod_rewrite.c> という記述があり、これは「もし mod_rewrite が有効なら〜する」という記述ですが、この mod_rewrite が有効になっていないため、それ以後の命令が実行されていないのです。

 WEBサーバー(Apache httpd)の mod_rewrite が読み込まれているかを確認するには、モジュールの読み込みの設定の箇所に次の記述があることを確認してください。 (もちろん、行がコメントアウトされていないことも確認してください)

LoadModule rewrite_module modules/mod_rewrite.so

2. .htaccessでの設定の上書きが許可されているか確認

 mod_rewrite が有効になっていることを確認したら、続いて .htaccess での設定の上書きが許可されているかを確認します。 これが許可されていなければ、.htaccess に何が書かれていようが、設定が有効になりません。

 確認すべきはWEBサーバー(Apache httpd)の設定の AllowOverride の設定です。 これが All になっている場合に限り、.htaccess で設定を上書きすることができます。

 例えば、次のように WordPress の設置ディレクトリに対して、AllowOverride All が指定されていることを確認する、もしくは設定を追加してみてください。

<Directory "/var/www/htdocs/wordpress/">
  AllowOverride All
</Directory>

 もし新しく設定した場合は、WEBサーバー(Apache httpd)の再起動も忘れずに行ってください。

おわりに

 本稿では、WordPressのパーマリンクの設定を変更した際に、記事が 404 Not Found になりアクセスできなくなった場合に確認すべきことについて解説しました。 多くの場合、上記の2つのことを確認することで解決するケースが多いです。 読者の方の悩みがこれで解決することを願っております。

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。
個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca