0

我想要做的是设置 NGINX 来检测特定的国家代码。我现在可以正常工作,添加诸如 这是在我的实际站点配置文件中而不是我的 nginx.conf 文件中的行。if ($geoip_country_code = IE) { rewrite ^(.*) http://link.com/for/Ireland;

我还想做的是为此添加移动检查,例如如果它是爱尔兰和移动,它将转到第二个链接。这甚至可以在这个级别上做到吗?还是我只是在服务器级别检测国家/地区然后必须以更标准的方式处理移动设备,例如在页面加载和使用移动设备检测脚本时。我知道我可以这样做,但我希望能够将检测添加到我的 NGINX 配置中的相同捕获中。

感谢所有的帮助和信息。

4

2 回答 2

1

看看http://detectmobilebrowsers.com。它有 nginx 的代码片段。最近我做了这样的nginx配置,工作正常。

于 2013-04-25T22:13:10.840 回答
0

由于移动用户代理的惊人差异,使用代码重定向比使用 nginx 配置要好得多。特别是,在 nginx 上调用一系列if语句的成本是不小的。

这个网站有一个非详尽的移动用户代理列表,旧的和不太旧的。至少可以说,您很快就会发现该列表实际上非常庞大。现在让我们只关注 iPhone、iPod 和 iPad。它们很容易区分:

Mozilla/5.0(设备类型cpu 类型;CPU 像 Mac OS X;en)AppleWebKit/420+(KHTML,像 Gecko)版本/3.0 Mobile/1A543a Safari/419.3

所以,这个不会造成问题。但是,该字符串与其他东西非常相似,包括 Safari 的桌面用户代理……这适用于最简单的手机。Android 没有这种简单性。以 HTC Desire 为例:

Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17

操作系统的标识符更改为第三个字段,这意味着您现在需要至少两个正则表达式引擎调用来匹配 iPhone 和一些 android。我说一些,因为......好吧,让我们看看摩托罗拉机器人:

MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0

……哇?

结论:如果您关心误报,您将需要一个用户代理数据库。如果不这样做,只需在用户代理上使用正则表达式对 nginx 进行广泛检查,搜索关键字 iPad、iPhone、iPod、Android、Windows Phone。这将标记大约 80-85% 的所有移动用户。如果你想匹配每个人,你需要使用用户代理数据库,因为制造商会重写他们的用户代理。

于 2013-04-24T19:30:20.480 回答