可通过Nginx的user_agent检测与条件重定向实现移动端自动跳转至m.example.com,需匹配Mobile/Android/iPhone等关键词,排除tablet/iPad/爬虫,用302测试后改301,并在m站server块中反向判断防止循环跳转。

可以通过 Nginx 的 user_agent 检测 + 条件重定向实现移动端访问自动跳转到指定子域名(如 m.example.com),同时避免 PC 端误跳、搜索引擎爬虫误判、以及循环跳转等问题。
识别移动端 User-Agent 并设置跳转规则
Nginx 本身不内置“移动设备”判断,但可通过正则匹配常见移动端 UA 字符串。推荐使用简洁可靠的匹配模式,覆盖主流 iOS/Android 设备,同时排除平板(可选)和爬虫:
- 匹配关键词:
Mobile(iOS)、Android、iPhone、iPod、BlackBerry、Opera Mini、Windows Phone - 排除干扰:
tablet、iPad、Tablet(若需区分平板,可加此条件) - 排除爬虫:
Googlebot、Bingbot、YandexBot等,避免 SEO 受影响
配置 server 块中的 if 判断与重定向
在主站(如 example.com 或 www.example.com)的 server 块中添加判断逻辑。注意:if 在 location 外可用,但应避免嵌套复杂逻辑:
set $mobile_redirect "";
if ($http_user_agent ~* "(Mobile|Android|iPhone|iPod|BlackBerry|Opera Mini|Windows Phone)") {
set $mobile_redirect "1";
}
if ($http_user_agent ~* "(tablet|iPad|Tablet|Googlebot|Bingbot|YandexBot)") {
set $mobile_redirect "";
}
if ($mobile_redirect = "1") {
return 302 https://m.example.com$request_uri;
}说明:使用 302 临时跳转便于测试;上线后可改为 301(永久跳转),但需确认无误后再切,避免缓存难撤销。
确保手机版子域名已正确配置且可访问
重定向目标(如 m.example.com)必须已在 Nginx 中有独立 server 块,并启用 HTTPS(建议全站 HTTPS):
- 确认 DNS 已解析
m.example.com到同一服务器 IP - 配置对应 server 块,监听
443(含 SSL 证书),或同时支持80并强制跳 HTTPS - 建议在手机版 server 中也加 UA 判断,防止用户手动访问 m 站后又被跳回 PC 站(即:PC UA 访问 m 站时,可选跳回 www)
补充:避免循环跳转与缓存干扰
常见陷阱是 PC 用户点错链接进入 m 站后,又因某些规则被跳回,形成死循环。可在手机版 server 中增加反向判断:
# 在 m.example.com 的 server 块中
if ($http_user_agent !~* "(Mobile|Android|iPhone|iPod|BlackBerry|Opera Mini|Windows Phone)") {
return 302 https://www.example.com$request_uri;
}另外,浏览器可能缓存 301 跳转,测试阶段务必用 curl -I 验证响应头,或隐身窗口+硬刷新;上线后如需调整,记得提醒用户清缓存或等待 TTL 过期。


















