スマホからのアクセス時にリダイレクトする
- 2015.09.01
- Apache 開発環境/開発ツール
- demo
PCサイトのURLとスマートフォンサイトのURLが異なる場合、スマートフォンからPCサイトにアクセスした場合や、PCブラウザからスマートフォンサイトにアクセスした場合にリダイレクトを設定します。今回は、Apacheを使用したリダイレクトの設定方法をまとめます。
関連記事:
- REMOTE_ADDRをプロキシ先サーバーにも保持させるには?
- telnetでHTTPリクエストを送信するには?
- SSL/TLS通信の疎通確認用コマンドライン 3選
- HTTPリダイレクト4種類の違いとは?
User-Agentでスマートフォンかどうかを判別する
User-Agentヘッダを参照すると、スマートフォンからのアクセスかどうかを判定することができます。スマートフォンの定義としては、90%以上のシェアを占める以下OS/ブラウザからのアクセスとします。
- OS:iOS、Android
- ブラウザ:OS標準ブラウザ、Chrome、Opera mini
上記定義に従って、Apacheでスマートフォン判定を行い、リダイレクトするには以下のように記述します。
BrowserMatch "^Mozilla/5.0 ((iPhone;|iPod;|iPod touch;|Android .* Mobile)" device=smartphone
BrowserMatch "^Opera/.* Opera Mini" device=smartphone
BrowserMatch "^Mozilla/5.0 (Linux; U; Android .* (SC-01C|N-06D)" device=tablet
RewriteEngine On
RewriteCond %{ENV:device} ^smartphone$
RewriteRule ^/(.*) http://sp.example.jp/$1 [R,L,NE]
設定のポイントは2つあります。
1点目は、タブレットSC-01CとN-06Dへの対応。この2機種は、User-AgentにAndroid と Mobileの両方のキーワードが含まれているため、スマートフォンと判別されてしまいます。これを避けるため、特別に除外ルールを設けています。
2点目は、mod_rewriteを使いリダイレクトを行っている点。Redirectディレクティブでは、条件付きリダイレクトができないので、RewriteCondで条件設定し、RewriteRuleでリダイレクトを行っています。
スマートフォンURLが別ドメインではなく、/sp/のようにスマートフォン専用パスを使用している環境では、次のようにRewriteルールを記述すればOKです。
RewriteEngine On
RewriteCond %{ENV:device} ^smartphone$
RewriteRule ^/sp/ -
RewriteRule ^/(.*) http://example.jp/sp/$1 [R,L,NE]
PC表示モードに対応する
スマートフォン対応サイトでは、基本的にスマートフォン用ページが表示されますが、PC用ページを表示したい人のために「PC表示モード」を設けることがよくあります。スマートフォンでもPC用ページを表示する必要が出てくるので、PC表示モードを実現する場合には、リダイレクトルールの変更も必要です。
PC表示モードかスマートフォン表示モードかの判別は、Cookieで行う方法とクエリー文字列で行う方法がありますが、アプリ側への影響が少ないことから、今回はCookieで行う方法で説明します。
「PC表示モード」リンクをクリックした場合、Cookieに”pcmode=1”を設定する処理が行われているものとします。その場合は、Cookieに”pcmode=1”という文字列がない、という条件をRewriteCondディレクティブとして追加します。
(BrowserMatchは省略)
RewriteEngine On
RewriteCond %{ENV:device} ^smartphone$
RewriteCond %{HTTP_COOKIE} !.*pcmode=1.*
RewriteRule ^/(.*) http://sp.example.jp/$1 [R,L,NE]
まとめ
条件付きリダイレクトはRewriteを使用するので設定ファイルが複雑になりがちです。設定の手助けになれば幸いです。
参考
関連記事: