12月份在武汉的一次互联网聚会中遇到上海的几个朋友,说到我去年尝试做了一个手机查询邮编的网站,他们到底是内行,问到是否做了自动判断浏览者的终端类型、自动切换,这个问题我一直想做但也一直没有做。聚会后我在服务器和网站上做了点实验,可以在某个页面实现自动判断、切换,但整体如何设置还没有想得很清晰,就先搁置了。
春节这两天稍微空闲一点,就又把这个问题摸索了一番,算是基本找到了解决办法,要点及代码记录如下:
首先要明确哪一个共同的URL切换到哪两个不同版本的URL,我选择是:
- 一个共同的URL:http://www.youbianku.com/
- 电脑版切换到的URL:http://www.youbianku.com/%E9%A6%96%E9%A1%B5 (首页)
- 手机版切换到的URL:http://m.youbianku.com/
然后要用一段代码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程序去。
至此终于是实现了预定的首页跳转目的,在跳转后的电脑版首页中留了到手机版的人工跳转链接,在手机版中也留了到电脑版的人工跳转链接。
进一步,还可以设置两种版本的内页自动判断、跳转到合适的版本页面去,这个工作留着稍晚些天再进行。
评论