WordPressパーマリンクがNot Foundになった時の対策まとめ

最終更新:2016-11-25 by Joe

WordPress開発では、しばしば出くわす404 Not Found。

いいかげん慣れてきたので、日頃は無意識に対応できていますが、記事にするため対策をまとめました。

1)httpd.confのAllowOveride 設定を確認。

基本的にパーマリンク設定を行えば、wordpressディレクトリに配置した「.htaccess」ファイルによる、URLの書き換え(rewrite)が必要だ。基本的にはWordpressが(ユーザが)更新を行ってくれるが、.htaccessのパーミッション設定などの問題でこれが行われない時がある。

選定を保存した直後、管理画面に、こんなメッセージが出ているはずだ。(あまり主張が強くないから、たまに見逃してしまう。)

Screen Shot 2014-11-23 at 12.00.38 AM

「.htaccessを更新する必要があります」

具体的には、デフォルトはWordpressディレクトリ(wp-contentなどたくさん入っているディレクトリ)配下のファイルオーナーはすべてあなたのユーザ名になっている。一方でWordpressを実行しているのは、多くの場合アパッチだろう。Ubuntsuならwww-data、私のマックは_wwwというユーザ名。

共有サーバーを借りているなら、(なぜか)書き換えが成功するが、私のローカル環境(MacOS)はこんな感じだ。

$ ls -la | grep htaccess

-rw-r--r--    1 joe  wheel    236 Nov  3 22:04 .htaccess

これではwheelグループに含まれていないアパッチは書き込めない。実際は、上記の管理画面の同じページの下の方までスクロールすると、そのままコピペできるように表示してくれている。とても親切だ。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

あとはこれをwordpressディレクトリの.httaccessに追記すればOK。もし、.htaccessがなければさくっと作成しよう。

2)mod_rewriteを有効かどうか確認

WordPressの引越しでパーマリンクの404 Not Foundエラーが発生

3)管理画面から、もう一度「パーマリンク設定>保存」してみる

カスタムポストを作成したときによくある事例。

すべてのパーマリンクと、worpressのクエリ(?p=1234とかいうやつ)への情報は、キャッシュで保存されており、通常は、一階作成されると、キャッシュを読み続ける。flush_rewirte_ruleという関数もあるのだが、この処理は比較的重く、WPロードで毎回呼ぶのは好ましくない。

このキャッシュを簡単にクリアする方法が、管理画面で保存ボタンを押す事だ。変更はしなくていい。ただパーマリンク設定を保存しなおそう。

4)WPのリライトを確認

そろそろ佳境だ。

リライトの設定状態を確かるために、こういったプラグインもあるが、いちいちプラグインを実行するのは億劫な人も多いのでは?

https://wordpress.org/plugins/rewrite-rules-inspector/

テーマ開発者なら、プラグインよりは、下記のようなチェッカーコードのスニペットが役に立つ。共有してくれたsoulseekah、に感謝しつつ紹介:

https://gist.github.com/soulseekah/2321074

わたしはこのコードをfunctions.phpに張りつけ、

if ( isset( $_GET['_rewrite'] ) ) {
  // Execute the function
}

などの条件で実行している。こまったらいつでもURLに?_rewriteを付記すればすべてのルールを確認できる。

好ましくはないが・・誤って本番に出してしまっても、問題にならないだろう(だれもこのURLを実行することはない)