Web制作・開発会社 プレスマンのスタッフブログ

PRESSMAN*Tech

ApacheでのスマートフォンとPCの振り分けとcookie

トップページで振り分けするだけなら別になにも難しくありません。スマートフォンのディレクトリが/sp/とすると

RewriteEngine ON
RewriteCond %{HTTP_USER_AGENT}(iPod|iPhone|Android|BlackBerry|Windows.Phone) [NC]
RewriteRule ^/$ http://www.pressman.ne.jp/sp/ [L]

でおしまいです。これで、http://www.pressman.ne.jp もしくは http://www.pressman.ne.jp/にスマートフォンでアクセスするとhttp://www.pressman.ne.jp/sp/に遷移します。なので、スマートフォンでPCページを見たければhttp://www.pressman.ne.jp/index.html等にリンクをはればよくなります。

Cookieをつかって行うことも出来ます。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/sp/.*$
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android|BlackBerry|Windows.Phone) [NC]
RewriteCond %{QUERY_STRING} !vm=pc
RewriteCond %{HTTP_COOKIE} !vm=pc [NC]
RewriteRule ^(.*)$ http://www.pressman.ne.jp/sp/$1 [R=301,L]

こうすれば、cookieにvm=pcがなければ http://www.pressman.ne.jp/sp/に遷移するようになります。
また、cookieとは関係ありませんが、先ほどと違うのは http://www.pressman.ne.jp/hoge.html へのアクセスは http://www.pressman.ne.jp/sp/hoge.html へ遷移するようになります。

後は条件に合わせてcookieを設定すればいいだけです。javascriptが使えるのならそれが一番便利ですが、そうでないならサーバー側で実装ということになります。PHP等が使えれば簡単ですが、クッキーの期限がブラウザを閉じるまででいいならapacheでも設定出来ます。

RewriteCond %{QUERY_STRING} vm=pc
RewriteCond %{HTTP_COOKIE} !vm=pc [NC]
RewriteRule (.*) $1 [E=pc_cookie:1,L]
Header add Set-Cookie "vm=pc; path=/" env=pc_cookie

Header setだと他のクッキーを上書きしてしまいますので注意です。apacheのconfで有効期限も指定できれば便利なのですが、なにかやり方があるのでしょうか。