WordPress でトップページ以外が 404 not found になった

  • Apache
  • WordPress

httpd.conf などでサーバーの設定をした後にサイトを見てみると、WordPress の詳細ページが全部 404 not found になっていました。

エラー解決のために原因をさがしました。

  • .htaccess
    リダイレクトは正しい。
  • index.php
    wordpress をちゃんと読み込んでいる。
  • wordpress/wp-config.php
    DB接続設定、他の設定も正しい。
  • パーマリンクの更新
    構造に問題はなさそう
  • site_url と home_url の値
    そもそもいじってない

主要な箇所を探しましたが、問題なさそうです。ですが、ふとカテゴリアーカイブを見てみたところ 404 だったことが判明しました。

解決

ここでようやく、.htaccess が効いてない事に気づきました。

修正を加えていた httpd.conf の方を確認したところ、何かの拍子に消してしまったのか、AllowOverrideディレクティブの記述が吹っ飛んでいました。

AllowOverride とは?

.htaccess での上書きを許可するかどうか設定できるディレクティブです。AllowOverride Noneであれば、.htaccess の設定はすべて無効になります。

どこまで上書きを許可するかは細かく設定でき、Allとするとすべての設定の上書きを許可されます。

今回はここが None になっていてすべて無効化されていたために起きた現象でした。None になっている時は .htaccess を置いていると Internal Server Error になるものだという思い込みをしていたので、発見までに無駄な時間を要してしまいました。トップページだけは index.php が普通に呼び出されるため問題なく閲覧できるというのもなかなかの曲者です。