今回は「スマホでアクセスしてきたら有無を言わさず専用ディレクトリに転送」
というのを.htaccessを使って実現する方法です。

それまでに大前提として以下のサイト構成ならより便利。

  • スマホサイトがサブディレクトリに位置する(例:hoge.com/sp/)
  • ファイル名の構成がPCサイトと全く同じ

PCサイトからスマートフォンサイトのみの転送の場合

以下の内容の.haccessをルート直下に配置。

RewriteEngine on

RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^(.*)$ sp/$1 [R]
RewriteBase /

リクエストされたURIに/sp/が含まれず、User Agentに
iPod(Touch),iPhone,iPad,Android,Windows Phoneが含まれてた場合に
ファイル名の直前にsp/を書き加える、という内容です。

この動作だとPCサイト(hoge.com/index.html)と
スマホサイト(hoge.com/sp/index.html)が同一ファイル名じゃないとダメです。
もちろん、全てのファイル名が上記の法則で配置されてる事が大事!

PCでスマートフォンサイトにアクセスした場合にも転送(双方向)

PCでスマートフォンサイトにアクセスした場合に、PCサイトに転送させる場合。

RewriteEngine on

RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^(.*)$ sp/$1 [R]
RewriteBase /

RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^sp/(.*)$ $1 [R]
RewriteBase /

さっきとは逆の挙動で
リクエストされたURIに/sp/が含まれていて、User Agentに
各種端末がない場合にファイル名の前のsp/を取り除くという書き方。

リクエストをすべてトップページに転送させる場合

ファイル名の関係などが対応しておらず、全て一律でトップページに転送させる場合。

RewriteEngine on

RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^(.*)$ sp/ [R]
RewriteBase /

RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^sp/(.*)$ / [R]
RewriteBase /

URLのリライトを行う(PCサイトと同じURLのまま転送させる)場合は
RewriteRuleの各末尾の[R]を、[L]に書き換えれば実現できます。

個人的には過去に紹介した「スマホでアクセスした場合のみボタンを表示
のほうが好きなのですけど、時代はレスポンシブなのかなあやっぱ。
Google先生がそう言ってはる以上、そうなのかも知れませんね(笑)
ま、PCサイトはそのままでスマホサイトのみ構築、てのも多いので
これはこれで役に立つかな、と覚え書きしておきます。