ダリの雑記:WEBプログラム版

WordPressのパーマリンクでindex.phpが勝手に挿入される。

かなり久しぶりにこの現象になったのでメモ。

パーマリンクの「カスタム構造」にて、なぜか頭にindex.phpが勝手に入る現象が発生。

消すことはできますが、そうするとページが開かなくなるという困った状態になります。

Codexを見てみると、「PATHINFO: "Almost Pretty"」という形式になっているらしい。

いわく

PATHINFO パーマリンクは、途中に /index.php が挿入されるという差異の他は、mod_rewrite パーマリンクによく似ています。

とのことですが、いやいや全く持って似て非なるものですよ。

というわけでいろいろと調べた結果、htaccessを直接記述すればよいとのこと。

以下、例は「ドキュメントルート/wordpress」にインストールしていると仮定してください。
ドキュメントルートにそのままおいている場合は「wordpress/」部分はいらないはずです。

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

# END WordPress

これをwordpressフォルダにアップロードしたところ、「カスタム構造」の設定でもページが開くようになりました。

なお、マルチサイト化すると、「パーマリンク設定」画面の「カスタム構造」では強制的に「/index.php」が入るようになるため、上記の方法では直せなくなります。(正確にはネットワーク設定で「/index.php」は削除可能なのですが、その後のhtaccessの設定がうまく行きませんでした。)

この状態になった場合は、このサイトに書かれている方法が非常に有効です。

wordpress のパーマリンクに index.php がはいって困ったの巻 | ちからの備忘録的日記

要するに、どこかのプラグインに

add_filter('got_rewrite','__return_true');

を潜り込ませて、有効化すればOK。

これで、「パーマリンク設定」画面で編集してもindex.phpが入ることはなくなるし、htaccessも特に編集することなく(マルチサイト化したときの初期の設定のもので)ページも正常に開くようになります。

 

参考サイト

モバイルバージョンを終了