当前位置

手机版网站与电脑版网站的自动判断及切换

James Qi 在 2012年1月27日 - 23:55 提交
内容摘要: 12月份在武汉的一次互联网聚会中遇到上海的几个朋友,说到我去年尝试做了一个手机查询邮编的网站,他们到底是内行,问到是否做了自动判断浏览者的终端类型、自动切换,这个问题我一直想做但也一直没有做。聚......

  12月份在武汉的一次互联网聚会中遇到上海的几个朋友,说到我去年尝试做了一个手机查询邮编的网站,他们到底是内行,问到是否做了自动判断浏览者的终端类型、自动切换,这个问题我一直想做但也一直没有做。聚会后我在服务器和网站上做了点实验,可以在某个页面实现自动判断、切换,但整体如何设置还没有想得很清晰,就先搁置了。

  春节这两天稍微空闲一点,就又把这个问题摸索了一番,算是基本找到了解决办法,要点及代码记录如下:

  首先要明确哪一个共同的URL切换到哪两个不同版本的URL,我选择是:

  然后要用一段代码redirect_mobile.php来判断访问者的终端类型等参数,以便跳转到相应的版本:

<?php
$mobileRedirect="http://m.youbianku.com/";
$pcRedirect="http://www.youbianku.com/%E9%A6%96%E9%A1%B5";
$mobile_browser = '0';

if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android|ios|mobi)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
    $mobile_browser++;
}

/*
echo "HTTP_USER_AGENT = ".$_SERVER['HTTP_USER_AGENT']."<br />\n"
. "HTTP_ACCEPT = ".$_SERVER['HTTP_ACCEPT']."<br />\n"
. "HTTP_X_WAP_PROFILE = ".$_SERVER['HTTP_X_WAP_PROFILE']."<br />\n"
. "HTTP_PROFILE = ".$_SERVER['HTTP_PROFILE']."<br />\n"
. "ALL_HTTP = ".$_SERVER['ALL_HTTP']."<br />\n";
*/

if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))) {
    $mobile_browser++;
}

$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
$mobile_agents = array(
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
    'wapr','webc','winw','winw','xda','xda-','Googlebot-Mobile');

if(in_array($mobile_ua,$mobile_agents)) {
    $mobile_browser++;
}

if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini')>0) {
    $mobile_browser++;
}

if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
    $mobile_browser=0;
}

$uri=$_SERVER["REQUEST_URI"];
//$uri="/";
if($mobile_browser>0 ) {
// echo "mobile version";
    header("Location: $mobileRedirect"); //手機版
}else {
// echo "pc version";
    header("Location: $pcRedirect"); //電腦版
}
?>

  再一个关键就是在什么地方运行这段php程序,我先想在电脑版的MediaWiki平台页面或者index.php中运行,但都遇到问题没有成功,后来尝试修改了Apache中的设置,才实现了首页的跳转调用:

<VirtualHost *:80>
ServerName www.youbianku.com
ServerAdmin webmaster@youbianku.com
DocumentRoot /usr/local/apache2/htdocs/www.youbianku.com/
<Directory /usr/local/apache2/htdocs/www.youbianku.com/>
       Options FollowSymLinks
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteRule !^xinxi(.+)$ index.php?title=$1 [L,QSA]
       RewriteRule ^$ scripting/redirect_mobile.php [L,QSA]
       RewriteRule ^xinxi/index.html$ xinxi/index.php [L,QSA]
</Directory>
</VirtualHost>

  上面加粗的那句就是将路径为空的URL(http://www.youbianku.com/)转到判断的php程序去。

  至此终于是实现了预定的首页跳转目的,在跳转后的电脑版首页中留了到手机版的人工跳转链接,在手机版中也留了到电脑版的人工跳转链接。

  进一步,还可以设置两种版本的内页自动判断、跳转到合适的版本页面去,这个工作留着稍晚些天再进行。

自由标签:

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符