0

我正在使用Apache的重寫url。 .htaccess文件包含以下重定向規則。我的要求是,當我點擊網址www.temp.com/card時,基於設備,它應該在內部調用該特定的.do重寫平板電腦和智能手機的url

例如,從智能手機如果我在內部輸入www.temp.com/card,應該調用www.temp.com/pa/spCard.do

我試着用下面的規則,但問題是有些平板電腦有Android,所以在平板電腦上它總是會進入smarphone .do

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] 
RewriteRule ^card/?$ /pa/spCard.do?uri=$1 [QSA] 

RewriteCond %{HTTP_USER_AGENT} "ipad" [NC] 
RewriteRule ^card/?$ /pa/tabCard.do?uri=$1 [QSA] 

RewriteRule ^card/?$ /pa/webCard.do?uri=$1 [QSA] 
</IfModule> 

有沒有什麼辦法可以區分Android手機和平板電腦(使用用戶代理字符串)?

+0

請大家,任何人都可以幫忙嗎? – Rosh 2013-04-22 06:10:18

回答

2

您必須停止通過添加L標誌,當你發現一個設備

RewriteRule ^card/?$ /pa/spCard.do?uri=$1 [L,QSA] 

進一步重寫和你沒有$1在重寫規則的任何地方拍攝。此外,URL總是card,這樣就可以減少規則

RewriteRule ^card/?$ /pa/spCard.do [L] 

RewriteRule ^card/?$ /pa/spCard.do?uri=$0 [L,QSA] 

,如果你需要的uri參數。

tabCard.dowebCard.do相同,當然。

要在Android手機和平板電腦之間切換,請參閱Chrome for Android User-Agent。不幸的是,這並不適用於所有平板電腦。但至少,你可以通過指定android.*mobile與第一條規則,只是android與第二

RewriteCond %{HTTP_USER_AGENT} android.*mobile|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile [NC] 
RewriteRule ^card/?$ /pa/spCard.do?uri=$0 [L,QSA] 

RewriteCond %{HTTP_USER_AGENT} android|ipad [NC] 
RewriteRule ^card/?$ /pa/tabCard.do?uri=$0 [L,QSA] 

有了這些條件,淘汰一些藥片,你就會知道,你在第二個規則和平板電腦第一條規則中的手機平板電腦。

+0

:有沒有什麼辦法可以區分手機和平板電腦(使用用戶代理字符串)?嘗試了一些規則,但很難區分Android移動設備和平板電腦。 – Rosh 2013-04-22 09:01:19

+1

@Rosh差異似乎是「Mobile」,詳情請參閱https://developers.google.com/chrome/mobile/docs/user-agent。雖然,似乎有平板電腦的用戶代理字符串中包含「Mobile」,請參閱對此答案的評論,例如http://stackoverflow.com/a/5344382/1741542 – 2013-04-22 09:24:21

+0

使用android平板電腦和手機進行檢查。平板電腦用戶代理正在其中移動。 – Rosh 2013-04-22 09:39:23

相關問題