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程序去。
至此終于是實現了預定的首頁跳轉目的,在跳轉後的電腦版首頁中留了到手機版的人工跳轉鍊接,在手機版中也留了到電腦版的人工跳轉鍊接。
進一步,還可以設置兩種版本的内頁自動判斷、跳轉到合适的版本頁面去,這個工作留着稍晚些天再進行。
评论