由于移动用户代理的惊人差异,使用代码重定向比使用 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% 的所有移动用户。如果你想匹配每个人,你需要使用用户代理数据库,因为制造商会重写他们的用户代理。