ウェブサイトでPC用ページとスマホ用ページが別々に存在する場合、ユーザーエージェントで振り分けるのが一般的です。
.htaccess , JavaScript , PHPでのスマホ・PCの条件分岐をまとめました。
ユーザーエージェント
iPhone | [iPhone]が含まれていて[iPad]が含まれていない |
Android | [Android]か [Mobile]が含まれている |
Windows Phone | [Windows Phone]が含まれている |
PC | それ以外 |
.htaccess で自動的に振り分ける方法
一番よく使います。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC]
RewriteCond %{QUERY_STRING} !mode=pc
RewriteRule ^$ /sp/ [R,L]
</IfModule>
4行目のRewriteCond %{QUERY_STRING} !mode=pcは
?mode=pc
というパラメーターがURLに付与されていないときだけリダイレクトする
付与されている場合はリダイレクトしないという意味です。
スマホ用ページからPC用ページにリダイレクトする場合
使う機会はあまりないと思うが、検索結果でスマホ専用ページがPC用のページより上位に来ちゃったからスマホページにアクセスしたらPCページに飛ばしたいときなど
その場合、3行目を以下のように変更します
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone) [NC]
RewriteCond %{QUERY_STRING} !mode=pc
RewriteRule ^$ /sp/ [R,L]
</IfModule>
JavaScript でスマホ用ページにリダイレクトする
JavaScriptでユーザーエージェントを判定して合致した場合はスマホ用URL「/sp/」へリダイレクトする方法です。
var ua = navigator.userAgent;
if ((ua.indexOf('iPhone') > 0 && ua.indexOf('iPad') == -1) || ua.indexOf('iPod') > 0 || (ua.indexOf('Android') > 0 && ua.indexOf('Mobile') > 0 )|| ua.indexOf('Windows Phone'))
{
location.href = '/sp/';
}
indexOf()メソッドは、指定したキーワードの発見位置を返す。
発見できなければ「-1」を返すので、0より上であればキーワードが発見できたことになります。
iPadは「-1」で除外、Androidのタブレットも除外しています。
navigator.userAgentが「iPhone」だった場合
<script type="text/javascript">
if ((navigator.userAgent.indexOf('iPhone') > 0{
//iPhoneだったときの処理
}
</script>
navigator.userAgentがiPhoneじゃなかったとき
<script type="text/javascript">
if ((navigator.userAgent.indexOf('iPhone') == -1{
//iPhoneじゃなかったときの処理
}
</script>
JavaScriptでPC,スマホを判別して処理を変えることについては下記の記事も参考にどうぞ。
PHPによるスマホ、PCの振り分け
<?php
$ua=$_SERVER['HTTP_USER_AGENT'];
if((strpos($ua,’iPhone’)!==false)||(strpos($ua,’iPod’)!==false)||(strpos($ua,’Android’)!==false && (strpos($ua, 'Mobile') !== false)) {
header(“Location:/sp/”);
exit();
}
?>
参考サイト: