Xserverが今なら最大50%OFF! 2022年11月25日(金)12:00まで

パーマリンク設定にindex.phpが勝手に追加されて、消すと404になる現象の原因と解決方法は?

この記事は約4分で読めます。
本文は約2554文字です

awsのサーバーにセットアップされたwordpressサイトで、TOPページ以外404になる現象がありました。

いつものようにパーマリンク設定を更新すれば解決すると思いきや、そんな簡単な話ではありませんでした。

パーマリンク設定を基本にすれば、すべてのページが正常に表示されます。

基本以外にするとTOPページ以外は404になってしまう。

原因が全く分からないので、Wordpressをリセットしてみました。

そうすると初期テーマに切り替わり、404は無くなったのですが、その代わりにパーマリンク設定に変化が現れました。

index.php/%postname%/

に代わっていました。

見慣れないindex.phpがパーマリンク構造の先頭についているのです。

これを削除すると、TOPページ以外は404になってしまいます。

この手掛かりをもとに『wordpress index.php パーマリンク 消す』というキーワードで検索して調べて見ると、2つのテーマの記事が見つかります。

  • .htaccessにいつもの内容を記載すれば直るという話
  • Apache設定のhttpd.confを修正する必要があるという話
この記事の内容

.htaccessにいつもの内容を記載すれば直るという話

こちらは相当昔のwordpressの時代の内容で、以下のような内容を.htaccessに書き込みなさいという内容でした。

通常、wordpressをインストールしてパーマリンク設定を更新すれば自動的に作られるものです。

参考になりませんでした。

# 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

Apache設定のhttpd.confを修正する必要があるという話

こちらの2つの記事が見つかりました。

httpd.confのAllowOverride Noneが原因

httpd.confの中にAllowOverride Noneという記述があるとNG

AllowOverride Allにしなければならないとのこと。

このディレクティブを None に設定すると、.htaccess ファイルは完全に 無視されます。 この場合、サーバはファイルシステムの .htaccess ファイルを読むことを 試みさえしません。

このディレクティブが All に設定されている時には、 .htaccess という コンテキスト を持つ 全てのディレクティブが利用できます。

確かにAllowOverride Noneになっていました。

#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.
#
<Directory />
    AllowOverride none
    Require all denied
</Directory>

AllowOverride Allに修正して、再起動

#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.
#
<Directory />
    AllowOverride All
    Require all denied
</Directory>

まとめ

WordPressでパーマリンクを基本以外にするときに、パーマリンクのリライトが発生します。その時には.htaccessにリライトルールが無いと404になってしまいます。

もし、.htaccessに記載があるのに404になる場合は、apacheが.htaccessの記載内容を無視している可能性があります。

そのための設定がhttp.confにあるAllOverride Allだというわけです。

レンタルサーバーであればapacheを自分でインストールすることもありませんので、こんな問題は絶対に置きませんが、awsやVPSなどで自分でOSやWebサーバーをインストールした時には起こりえる問題です。

パーマリンク設定にindex.phpが勝手に入る場合は、この地雷を踏んでいる可能性が高いです。

この情報は役に立ちましたか? はい いいえ
参考なったらシェアお願いします!

この記事を書いた人

サーバーソムリエのアバター サーバーソムリエ レンタルサーバー鑑定士

国内のあらゆるレンタルサーバーを使用、管理した経験があります。サーバー選びからWordpressを使ったサイト運営まで丸っとお任せください。あなた様のご希望にそった本当に使える最適なサーバーをご紹介します。

コメントを閉じる

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

この記事の内容