我在用Apache的重写url。.htaccess文件包含以下重定向规则。我的要求是,每当我点击url www.temp.com/card时,基于设备,它应该在内部调用特定的.do。
例如,在智能手机上,如果我在内部输入www.temp.com/card,它应该调用www.temp.com/pa/spCard.do。
我尝试了下面的规则,但问题是有些平板电脑有安卓系统,所以在平板电脑中,它总是进入智能手机.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手机和平板电脑(使用用户代理字符串)?
发布于 2013-04-22 07:26:31
当检测到设备时,必须通过添加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。不幸的是,这并不适用于所有的药片。但至少,您可以通过使用第一条规则指定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]有了这些条件,您就会知道第二条规则中有一台平板电脑,第一条规则中有一台电话或平板电脑。
https://stackoverflow.com/questions/16139638
复制相似问题