2015年6月26日金曜日

.htaccessでのwwwの統一処理が動かない問題

.htaccessを用いてwww付きURLから無しのURLへの301リダイレクトを行おうとしていましたが、しばらく詰まっておりました。
それで、何とか実行できるようにはなったのですが、今まで狙い通りに動かなかった理由が未だ謎なのです。
とりあえず報告だけしておきます。
ちなみに私が借りているサーバはさくらサーバです。

以下がうまく動かなかったときの.htaccessの内容です。

1 RewriteEngine on
2 RewriteCond %{REQUEST_FILENAME} !-f
3 RewriteCond %{REQUEST_FILENAME} !-d
4
5 RewriteCond %{HTTP_HOST} ^www\.example\.com
6 RewriteRule (.*) http://example.com/$1 [R=301,L]
7
8 RewriteCond %{QUERY_STRING} id=(.+)
9 RewriteRule ^(.+)\.html$ /index.php?post=$1&id=%1 [L]

まず5、6行で http://www.example.com から http://example.com への301リダイレクトを行おうとしているのがわかると思いますが、これが全く動いてくれません。
しかし、8、9行目の動的ページを静的ページに見せるリライトはしっかり動きます。

一応結果としては、2、3行目のRewriteCondを削除またはコメントアウトしたら動くようになります。
もしくは4行目にRewriteRuleを書いてやっても動くようになります。

RewriteCondを書く場合は合わせてRewriteRuleを必ず書かないといけないんだろうか・・・
でもそれだとしても5~9行目全部が動かないならまだ納得いくんだけど、5、6行目だけ動かないのがイマイチ納得が行かない。
ちなみにこれは5、6行目を削除またはコメントアウトしても8、9行目は動きます。

原因はちょっと分からないですが、とりあえずこんな現象が起こるのでご注意を。
原因が分かったらまた報告いたします。

0 件のコメント:

コメントを投稿