最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 302 重定向如何处理移动端访问自动引导至专属触屏版网址
时间:2026-08-23 12:15:48 编辑:袖梨 来源:一聚教程网
移动端访问自动引导到触屏版需在HTTPS的server块中用return 302跳转,基于UA正则匹配移动设备并携带完整$request_uri;HTTP 80端口仅用return 301无差别升级协议,不参与设备判断。
移动端访问自动引导到触屏版,Nginx 必须用 return 302 实现临时跳转,且 UA 判断只能放在 HTTPS 的 server 块中、location 外层;HTTP(80 端口)只做协议升级,不参与设备识别。
HTTPS server 块内做 UA 判断并 302 跳转
所有移动端逻辑必须在 listen 443 ssl 的 server 块里完成,不能写在 80 端口或 location 内。这样可确保 UA 已解密、判断准确,也避免 HTTP 层误判桌面用户。
- 使用正则匹配主流移动设备标识:
$http_user_agent ~* "(Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)" - 跳转目标必须带完整路径和参数:
return 302 https://m.example.com$request_uri; - 若需支持手动切换回 PC 版,加绕过条件:
if ($http_user_agent ~* "..." && $arg_desktop != "1") { ... }
HTTP(80 端口)只做协议升级,不判断设备
80 端口的配置仅负责把所有请求无差别升为 HTTPS,不涉及任何 UA 判断或域名跳转。
- 统一用
return 301 https://$host$request_uri;,保留原始 host 和完整 URI - 绝对不要在 80 端口的 if 块里写 UA 判断——否则 HTTP 请求可能错误导向 m 站,破坏兼容性
- 该步骤只为解决协议问题,后续设备适配全部交给 HTTPS 流程处理
关键细节不能漏
跳转生效的前提是基础环境可靠,几个硬性要求必须满足:
- m.example.com 必须已部署有效 SSL 证书,否则跳过去直接显示“您的连接不是私密连接”
-
务必用
$request_uri(含 query string),不用$uri或硬编码路径,否则 ?id=123 这类参数会丢失 - 若前端有 CDN 或负载均衡,需透传协议头:
set $real_scheme $scheme;并在 proxy_set_header 中设X-Forwarded-Proto $real_scheme;
验证是否配置正确
上线前用命令行快速确认行为符合预期:
- 执行
curl -I http://www.example.com/product?id=123:应返回 301 → 再对 HTTPS 地址测试,确认第二跳是 302 且 Location 指向https://m.example.com/product?id=123 - 用手机浏览器访问,检查地址栏是否变为 m 域名,且页面功能正常
- 桌面端访问同一 HTTPS 地址,不应跳转,状态码应为 200,内容为 PC 版