スマートフォン用URLへのリダイレクト設定

PCサイトのURLとスマートフォンサイトのURLが異なる場合、スマートフォンからPCサイトにアクセスした場合や、PCブラウザからスマートフォンサイトにアクセスした場合にリダイレクトを設定します。今回は、Apacheを使用したリダイレクトの設定方法をまとめます。

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を使用するので設定ファイルが複雑になりがちです。設定の手助けになれば幸いです。

参考