mod_rewrite 苦手

  • まぁ動いたけどね。言われたことはやった気がするけどモアベターなことやろうとすると無限ループに入る。困ったもんだ。
  • やりたいことは「ドメイン A, ドメイン B があり、A に携帯でアクセスした場合は B へ、B に PC でアクセスした場合は A へ飛ばす」ということ。
  • それぞれに DocumentRoot があればさほど問題でもないんだけど、サーバ上で動いているフレームワークの関係上 DocumentRoot は一つしか設定できないらしい。うーむ。
  • で、「A に携帯でアクセスした場合は B へ」の RewriteRule とか
ServerName A
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "DoCoMo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "J-PHONE" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "Vodafone" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "KDDI" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "UP.Browser" [NC]
RewriteRule (.*)      http://B/$1 [R=301,L]
  • これは動く。問題ない。
  • 「B に PC でアクセスした場合は A へ」を以下のように設定する
ServerName B
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !"DoCoMo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !"J-PHONE" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !"Vodafone" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !"KDDI" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !"UP.Browser" [NC]
RewriteRule (.*)      http://A/$1 [R=301,L]
  • こうすると携帯で無限ループが起こる。これは要求されていない(はず)のものなので言われない限り放置だね。眠いし。