【问题标题】:rewriting url for tablet and smart phone重写平板电脑和智能手机的 url
【发布时间】:2013-04-14 21:56:02
【问题描述】:

我正在使用 Apache 的重写 url。 .htaccess 文件包含以下重定向规则。我的要求是,当我点击 url www.temp.com/card 时,基于设备,它应该在内部调用该特定的 .do

例如,如果我在智能手机内部输入www.temp.com/card,它应该调用www.temp.com/pa/spCard.do

我尝试了以下规则,但问题是某些平板电脑具有 android,因此在平板电脑中它总是进入智能手机 .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 手机和平板电脑(使用用户代理字符串)?

【问题讨论】:

  • 拜托各位,有人可以帮忙吗?

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


【解决方案1】:

当您检测到设备时,您必须通过添加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]

有了这些条件,你就会知道你在第二条规则中有一个平板电脑,在第一条规则中有一个手机平板电脑。

【讨论】:

  • :有什么方法可以区分手机和平板电脑(使用用户代理字符串)?尝试了一些规则,但很难区分 Android 手机和平板电脑。
  • @Rosh 的区别好像是Mobile,详情见developers.google.com/chrome/mobile/docs/user-agent。虽然,似乎有平板电脑在其用户代理字符串中包含 Mobile,但请参阅此答案的 cmets,例如 stackoverflow.com/a/5344382/1741542
  • 用安卓平板电脑和手机检查。平板电脑用户代理中有移动设备。
猜你喜欢
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多