重写平板电脑和智能手机的网址

时间:2013-04-22 04:51:55

标签: apache .htaccess mod-rewrite url-rewriting url-rewrite-module

我正在使用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手机和平板电脑(使用用户代理字符串)?

1 个答案:

答案 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.dowebCard.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]

根据这些条件,您会知道第一条规则中有平板电脑,第一条规则中有手机平板电脑。