0

我正在使用 Apache 的重写 url。.htaccess 文件包含以下重定向规则。我的要求是,每当我点击 urlwww.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 手机和平板电脑(使用用户代理字符串)?

4

1 回答 1

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.do和相同。webCard.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]

有了这些条件,您将知道您在第二条规则中有平板电脑,在第一条规则中有手机平板电脑。

于 2013-04-22T07:26:31.073 回答