wp-cli の wp core install でWordPressを設置したところ、トップページは出るのに固定ページ /about/ だけが404になりました。原因はドキュメントルートに .htaccess が作られていなかったことです。この記事では、そこに気づくまでに何を確認したかと、日本語タイトルのスラッグをどう扱ったかをまとめます。
起きたこと:トップは出るのに固定ページだけ404
wp core install でWordPressを入れて、ブラウザでトップページを開くと問題なく表示されました。ところが固定ページの /about/ にアクセスすると404が返ってきます。
この時点で分かっていた条件は次のとおりです。
- パーマリンク設定は
/%postname%/に変更済み wp rewrite flushも実行済み- Apache の vhost 側で
AllowOverride Allは設定済み
つまり「よくある原因」とされる部分は、先に全部つぶしてあった状態でした。それでも404が消えないので、しばらく設定ファイルの方ばかり見ていました。
「rewrite flush したのに効かない」と思い込んで、パーマリンク設定とApacheのvhostを何度も往復して見直していました。実際に見るべきだったのは、生成されるはずのファイルが存在するかどうかでした。
原因:ドキュメントルートに .htaccess が無かった
ドキュメントルートを直接確認したところ、.htaccess が存在していませんでした。ls ではドットで始まるファイルが表示されないので、最初に見たときに気づけていませんでした。
WordPressは、パーマリンク設定を保存したり wp rewrite flush を実行したりしたときに .htaccess を書き込もうとします。ただし、書き込めなかった場合、.htaccess は作られません。そしてこのとき、コマンドはエラーで止まるわけではないため、「flush は成功した」という認識のまま先に進んでしまいます。
AllowOverride All が設定されていることと、.htaccess が存在することは別の話です。AllowOverride は「置かれていれば読む」という設定であって、ファイルを作ってくれるわけではありません。私はここを混同していて、vhost 側が正しいから .htaccess も当然あるはずだと思い込んでいました。
固定ページだけ404になるとき、トップページが表示されるかどうかで切り分けができます。トップは出るのに個別のURLだけ404なら、リライトルールが適用されていない疑いが濃いので、設定値より先にファイルの存在を見たほうが早いです。
対処:.htaccess を手で作ったら解消した
結論としては、.htaccess を手で作成したところ404は解消しました。WordPressが自分で書けない以上、こちらで置いてしまうのが確実です。
- ドキュメントルートで
.htaccessが存在するかを確認する(ドットファイルが見える形で確認する) - 存在しなければ、WordPressのリライトルールを記述した
.htaccessを手で作成する - 再度
/about/にアクセスして404が消えるか確認する
- 手で
.htaccessを置いたら/about/が表示されるようになった - vhost の
AllowOverride Allはそのままで問題なかった
今回は「書き込めなかったので作られなかった」という結果は確認できましたが、なぜ書き込めなかったのかまでは私は特定していません。所有者や権限のどこが原因だったかを詰めていないので、そこは分かっていないこととして書いておきます。手で置いて解決した状態は、裏を返せば今後もWordPress側から .htaccess を更新できない可能性が残っているということです。
もうひとつのハマりどころ:日本語タイトルのURL
パーマリンクを記事名(/%postname%/)にすると、日本語タイトルの記事ではスラッグも日本語になります。その結果、URLがエンコードされて非常に長いURLになります。
見た目が長いだけでなく、コピーして貼り付けたときに扱いづらくなります。そのため私は、投稿ごとに英語のスラッグを別途当てる運用にしました。
wp post update <id> --post_name=about-us
タイトルは日本語のまま、post_name だけを英語に上書きするやり方です。パーマリンク構造は /%postname%/ のままで、スラッグ側で調整するのがシンプルでした。
wp-cli で投稿を作った直後に wp post update <id> --post_name=... を続けて実行する流れにしておくと、日本語スラッグのまま公開してしまうのを防げます。
同じ症状のときに見る順番
| 確認するもの | 今回の結果 |
|---|---|
| パーマリンク設定 | /%postname%/ に設定済み・問題なし |
| wp rewrite flush | 実行済み・それでも404 |
| AllowOverride All(vhost) | 設定済み・問題なし |
| .htaccess の存在 | 存在しなかった(これが原因) |
順番としては、設定値を疑う前にファイルがあるかを見たほうが早いというのが、今回の一番の学びでした。設定は画面やコマンドで確認できてしまう分、「やった」という記憶が残ります。一方でファイルの有無は、見に行かないと分かりません。
wp core install直後、トップは表示されるのに固定ページ/about/が404になった- パーマリンクは
/%postname%/、wp rewrite flush実行済み、AllowOverride Allも設定済みだった - 原因はドキュメントルートに
.htaccessが存在しなかったこと。WordPressが書き込めなかった場合、.htaccessは作られない - 手で
.htaccessを作成したら404は解消した - ただし書き込めなかった理由までは特定していない
- 記事名パーマリンクは日本語タイトルがURLエンコードされて非常に長くなるため、
wp post update <id> --post_name=...で英語スラッグを別途当てるほうがよい


