Nginx可通过正则匹配User-Agent识别移动端并跳转:用if ($http_user_agent ~* "(Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)") { return 302 https://m.example.com$request_uri; }实现路径保留的临时重定向,配合$args和set $skip_mobile_redirect ""支持“电脑版”开关,需确保手机站SSL有效、资源路径正确且CDN不缓存302。

如何用Nginx正则匹配识别移动端UA
宝塔面板本身不提供“自动识别手机访问并跳转”的开关,必须手动改站点的 Nginx 配置。核心逻辑是:读取请求头中的 User-Agent,用正则判断是否含常见移动端标识(如 Mobile、Android、iPhone),再决定是否重定向。
注意:不能只靠 Mobile 判断,因为部分桌面浏览器(如 Chrome DevTools 模拟)也会带这个字段;也不能漏掉 iPad —— 它默认被当桌面设备,但多数用户期望它走手机版。
推荐用这段正则(已验证兼容主流 UA):
if ($http_user_agent ~* "(Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)") {其中 ~* 表示忽略大小写,$http_user_agent 是 Nginx 内置变量,直接获取请求头里的 User-Agent 字段。
PC 域名如何安全跳转到移动端域名
假设 PC 站是 www.example.com,手机站是 m.example.com,目标是:用户用手机访问 www.example.com/xxx 时,自动跳到 m.example.com/xxx,且保留路径和查询参数。
关键点有三个:
- 跳转必须用
return 302(临时重定向),别用301—— 否则搜索引擎可能把手机站误判为主站,造成 SEO 混乱 - 路径要完整传递,用
$request_uri,不是$uri(后者不含 query string) - 如果手机站用的是子目录(如
www.example.com/mobile/),就别用return,改用rewrite+break,否则会暴露重定向过程
完整配置片段(放在 PC 站的 server 块内):
if ($http_user_agent ~* "(Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)") {
return 302 https://m.example.com$request_uri;
}移动端域名反向跳回 PC 站怎么加“不跳转”开关
用户在手机站上点了“电脑版”,就得能切回去,而且之后不再自动跳转。这不能靠前端 JS 实现(Nginx 在网关层,JS 太晚),得靠 Cookie 或 URL 参数标记状态。
更可靠的做法是:在跳转时带上一个参数,比如 ?desktop=1,然后在手机站的 Nginx 配置里加一层拦截:
if ($args ~* "desktop=1") {
set $skip_mobile_redirect "1";
}
if ($http_user_agent ~* "(Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)" && $skip_mobile_redirect != "1") {
return 302 https://www.example.com$request_uri;
}注意:$args 是原始查询参数字符串,~* 是模糊匹配,set 变量必须在 if 外声明(宝塔默认没声明,需在 server 块顶部加 set $skip_mobile_redirect "";)。
为什么跳转后样式错乱或资源 404
常见原因是:手机站域名(如 m.example.com)没有正确配置 SSL 证书,或静态资源(CSS/JS 图片)仍引用 PC 域名下的绝对路径,导致混合内容被浏览器拦截。
检查点如下:
- 宝塔中确认
m.example.com已申请并启用有效 SSL 证书(不能只配www.example.com) - 手机站 HTML 中所有
src、href尽量用相对路径,或统一用//m.example.com/xxx协议相对写法 - 如果用了 CDN,确保其缓存规则没把 302 跳转响应缓存住(Nginx 默认不缓存 302,但 CDN 可能自作主张)
还有一个隐藏坑:宝塔「网站监控」或「防CC攻击」插件有时会干扰 if 判断逻辑,若跳转失效,先临时关闭这些功能测试。


















