.htaccessでスマートフォンとPCサイトを内部的に出し分ける
.htaccessでスマートフォンとPCサイトを内部的に出し分けようとして(ユーザーからは同じアドレスを参照)どうしてもリダイレクトされてしまう現象が起きた話
今回ルートディレクトリにpc、spのフォルダがある状態。ユーザーからアドレスの変更は見えずに出し分けをする。
(ユーザーはhttp://foobar.com/にアクセスするだけだが、内部的にはPC用にはpcフォルダ内、スマートフォン用にはspフォルダ内を表示している)
[.htaccess]
SetEnvIf User-Agent "iPhone" UA=sp
SetEnvIf User-Agent "iPod" UA=sp
SetEnvIf User-Agent "Android" UA=sp
RewriteCond %{REQUEST_URI} ^/(pc|sp)/
RewriteRule .* - [L]
RewriteCond %{ENV:UA} ^sp$
RewriteRule ^(.*)$ sp/$1 [L,NS]
ちなみに下記だとなぜかリダイレクトになってしまいます。ここでハマりました。。。
RewriteRule ^$ sp [L,NS]
振り分け出来ているかの確認方法
chromeで確認するとchromeが経路を覚えていて変更が更新されない。この為今回はcurlコマンドを使用して確認しました。
curlコマンドの主な使用方法
curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25" http://foo.com
リダイレクト先を取得する時
リファラーの偽装
curl -e http://yahoo.co.jp http://foo.com
*ちなみにリファラーとは、現在のページにアクセスする前にいたページのこと