我正在使用Apache的重写网址。 .htaccess文件包含以下重定向规则。我的要求是,当我点击网址www.temp.com/card
时,根据设备,它应在内部调用该特定.do
。
例如,如果我在智能手机内部输入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 :(得分:2)
当您检测到设备时,必须通过添加L
标志来停止进一步重写
RewriteRule ^card/?$ /pa/spCard.do?uri=$1 [L,QSA]
并且您没有在重写规则中的任何位置捕获$1
。此外,网址始终为card
,因此您可以将规则缩减为
RewriteRule ^card/?$ /pa/spCard.do [L]
或
RewriteRule ^card/?$ /pa/spCard.do?uri=$0 [L,QSA]
如果您需要uri
参数。
当然与tabCard.do
和webCard.do
相同。
要在Android手机和平板电脑之间进行distingiush,请参阅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]
根据这些条件,您会知道第一条规则中有平板电脑,第一条规则中有手机或平板电脑。