開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

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)はこんな感じだ。

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

あとはこれを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に張りつけ、

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

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