apache經過.htaccess(rewrite)判斷手機電腦跳轉-手機用戶重定向到手機版

自動判斷、重定向的辦法也有幾種:php

使用網站構建的程序(例如PHP)來判斷、重定向;
使用服務器上的Web服務(例如Apache)來判斷、重定向。html

在Apache中設置重定向有兩個辦法:java

在網站的httpd.conf中設置重定向,適合有服務器完整權限的網站管理員;
在網站所在目錄中修改.htaccess來設置,適合採用虛擬主機形式的網站管理員。android

這兩種辦法設置的重定向規則其實基本上都是同樣的,只是設置的地方不一樣,web

重定向設置的代碼例子:
RewriteCond %{HTTP_HOST} ^www\.zhi23\.com(.*)$
RewriteCond %{HTTP_REFERER} !^http\:\/\/(m|www)\.zhi23\.com(.*)$
RewriteCond %{HTTP_USER_AGENT} !ipad [NC]
RewriteCond %{HTTP_ACCEPT} 「text/vnd.wap.wml|application/vnd.wap.xhtml+xml」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「dang|doco|erics|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「wapp|wapr|webc|winw|winw|xda|xda-」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「up.browser|up.link|windowssce|iemobile|mini|mmp」 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} 「symbian|midp|wap|phone|pocket|mobile|pda|psp」 [NC]
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
RewriteRule ^(.*)$ http://m.zhi23.com/$1 [L,R=302]
註釋:
第一句經過是HTTP_HOST判斷網站的域名,看是否就是要判斷的網站;
第二句是經過HTTP_REFERER判斷來源路徑,若是是自身傳統網站或手機網站就不跳轉;
第三句開始是經過HTTP_USER_AGENT來判斷瀏覽者所用設備是否爲手持設備,其中有一句是經過HTTP_ACCEPT判斷代碼類型,並在開頭和結尾排除掉ipad和macintosh;
最後一句是302重定向到相應的手機版頁面。
實際使用中可能會根據具體狀況對上面的代碼進行一些修改,最好能理解和掌握Apache的Rewrite規則纔好靈活運用。
以上的例子能夠這樣驗證:用手機瀏覽「問版主電腦版」(http://www.zhi23.com),看是否自動跳轉到「問版主手機版」(http://m.zhi23.com)。apache

下面進一步介紹瞭如何使用apache的mod_rewrite模塊修改.htaccess文件判斷訪問終端類型並重定向的方法。首先要確實服務器是使用apache服務來提供Web服務的,並加載了mod_rewrite模塊,具體加載mod_rewrite模塊方法,網上有詳細教程,請自行sou123.win搜索。windows

 

讓apache服務器支持.htaccessapi

只要簡單修改一下apache的httpd.conf配置就可讓APACHE支 持.htaccess了:AllowOverride None    修改成: AllowOverride All瀏覽器

***在普通網站根目錄下新建 .htaccess 文件:服務器

# 將 RewriteEngine 模式打開RewriteEngine OnRewriteBase /

# Rewrite 規則 判斷用戶瀏覽器類型,若是是手機就跳轉到手機網站

RewriteCond %{HTTP_HOST} ^www\.zhi23\.com(.*)$

RewriteCond %{HTTP_USER_AGENT} "(baidu.Transcoder|mini|android|blackberry|googlebot-mobile|iemobile|Mobile|ipad|iphone|ipod|opera mobile|palmos|webos|ucweb|Windows Phone|Symbian|hpwOS)" [NC]

RewriteRule ^(.*)$ http://m.zhi23.com/$1 [L,R=302]

 

上面的代碼,自動判斷手機用戶而後跳轉到手機網站,並帶有相同的參數,如手機用戶輸入的網址是http://www.baidu.com/index.php?go=1那麼系統跳轉時會自動加上參數http://m.baidu.com/index.php?go=1。

這裏須要說明下,由於RewriteRule ^(.*)$ http://m.baidu.com/$1 [L,R=302]的加入,若是手機頁面中有須要訪問非手機網站資源時,如其餘子目錄或二級網內容,就須要設置相應正則排除指定網站或文件,如: RewriteRule ^(.*?(?<!jpg)$) http://m.baidu.com/$1 [L,R=302],就不會形成手機訪問非手機頁面中jpg圖片時出現沒法訪問的問題了。也能夠經過判斷來源是什麼域名來跳轉,如:
RewriteCond %{HTTP_HOST} !^img.baidu.com [NC]

RewriteCond %{HTTP_HOST} !^ditu.baidu.com [NC]

RewriteCond %{HTTP_USER_AGENT} "(baidu.Transcoder|mini|android|blackberry|googlebot-mobile|iemobile|Mobile|ipad|iphone|ipod|opera mobile|palmos|webos|ucweb|Windows Phone|Symbian|hpwOS)" [NC]RewriteRule ^(.*)$ http://m.baidu.com/$1 [L,R=302]
上面的意思就是,若是不是訪問img.baidu.com,ditu.baidu.com的手機用戶才跳轉到m.badu.com。


apache經過.htaccess(rewrite)判斷手機電腦跳轉
***電腦訪問手機網站時跳轉:
手機網站根目錄下新建 .htaccess 文件:
# 將 RewriteEngine 模式打開

RewriteEngine OnRewriteBase /

# Rewrite 規則 判斷用戶瀏覽器類型,若是是電腦用戶就跳轉到普通網站

RewriteCond %{HTTP_USER_AGENT} "!(baidu.Transcoder|mini|android|blackberry|googlebot-mobile|iemobile|Mobile|ipad|iphone|ipod|opera mobile|palmos|webos|ucweb|Windows Phone|Symbian|hpwOS)" [NC]

RewriteRule ^(.*)$ http://www.baidu.com/$1 [L,R=302]
這樣,在手機網站下,若是是電腦用戶訪問了,就自動跳轉到普通網站,讓用戶更適合瀏覽。

 

Tips: 
[NC]的意思 即不分大小寫 
[R]的意思 重定向 
[F]的意思 禁止訪問 
[L]的意思 這是最後一條規則,exit

 

補充:在判斷跳轉的條件中加入百度轉碼的user-agent: baidu.Transcoder,就可讓百度抓取時知道手機版的網址,而且再也不自行進行轉碼。百度關於禁止轉碼的說明請看個人另一篇博文《禁止百度WEB頁面到手機WAP的轉碼》,用上面的辦法就是百度說明中的辦法

關於301 重定向, 看 《經過htaccess實現301重定向常見的方法

http://blog.csdn.net/qikexun/article/details/50896019

 

我在配置的時候是將我項目的.htaccess文件複製到官網指定文件夾,增長了:

下面內容,admin爲域名下的一個文件夾,測試能夠實現(手機訪問jiankang.test.com時能夠自動跳轉到admin下)
注:是將.htaccess文件放在了網站指定目錄下 (是將.htaccess文件放在域名的html文件夾下,經過html 跳轉至admin)

RewriteCond %{HTTP_USER_AGENT} "(baidu.Transcoder|mini|android|blackberry|googlebot-mobile|iemobile|Mobile|ipad|iphone|ipod|opera mobile|palmos|webos|ucweb|Windows Phone|Symbian|hpwOS)" [NC]RewriteRule ^(.*)$ http://jiankang.test.com/admin/$1 [L,R=302]
相關文章
相關標籤/搜索