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

相关问题