でろぐ

でぐちのブログ略して「でろぐ」

Wordpressでパーマリンクからindex.phpを消す方法

今日は仕事で少し困った事態になったんですけど何とか回避する方法を見つけたのでそれを忘れないようにメモします。 その困った事というのがWPでのパーマリンクの設定。 WPのデフォルトのパーマリンクは?p=123という感じで記事のナンバリングなわけですがP=が入っているので動的ファイルという風に検索エンジンに思われちゃうかもしれません。 あと個人的に好きじゃないんです。 なのでパーマリンクには拘りたいところです。 やはり個人的に好きな構造のカテゴリ名/エントリ名/という形にしたいと思うわけです。 で、その構造にしようとしたらWPの管理画面のパーマリンク設定でカスタム構造にチェックを入れて

/%category%/%postname%/

と記述すればいいんですが、ここで詰まりました。 何とこの設定をしたあとでサーバー側の設定によって分岐する事が分かったんです。 1つはそのまま設定が通るパターン。 これは何の問題もないです。実にスマート。 で問題がもう一個のパターン。 なぜか

index.php/%category%/%postname%/

のような感じでindex.phpが表示されるパターンです。 こっちが結構やっかいでindex.phpを消してもパーマリンクが表示されないばかりかタグの検索やpunycode変換までもがキャンセルされるというひどい事になってしまいます。 (まあパーマリンクが存在しないのでここの部分が正常に動いてもたいした意味はないんですけど。)

で、色々調べた結果.htaccessファイルを変更してアップしてあげれば修正分が適用されるという事が分かりました。 実際の.htaccessの記述は以下のような感じです。 (以下の例はWPのインストール箇所がドメイン/wpの場合で、ドメイン/で表示させる場合です。)

php_flag mbstring.encoding_translation off
php_value default_charset "UTF-8"

# BEGIN WordPress

RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


# END WordPress

これでパーマリンクの設定が完了して正常に表示され、タグの検索やpunycode変換も正常に動作するようになります。 あと、1点だけ注意が必要で最後の行のRewriteRule . /index.php [L]の部分の.と/の間の半角スペースを消すと正常に動作しません。 ものすごく細かいですがここでかなりの時間格闘しましたw ちなみに今回使用したサーバーはファーストサーバーさんなのでたぶんファーストサーバーさんはこの設定でいけると思います。 あと他に動作を確認しているのはヘテムル、コアサーバー、ハッスルサーバーです。他のサーバーで動くかどうかは分からないので実際に試してみる方は自己責任でやってみてください。