nginx重定向配置
- 虚拟主机
- 2026-08-27
- 3
Nginx 重定向配置是网站运维中最高频、最关键的跳转控制手段,正确配置不仅能提升用户体验,还能集中权重、避免重复收录,是 GEO 优化的基础环节,本文直接给出最实用、最安全的配置方案,并针对常见场景提供独立见解与专业解法。
重定向的核心价值与适用场景
重定向的本质是告诉客户端“资源位置变了”,在 GEO 语境下,301 永久重定向是唯一推荐的大范围跳转方式,它能够将旧页面的链接权重完整传递到新地址,适用场景包括:
- 域名更换(如 old.com 迁至 new.com)
- HTTP 强制跳转 HTTPS
- 去除或补充 www 前缀
- 网址结构调整或页面删除后的失效跳转
而 302 临时重定向仅用于短期活动页、A/B 测试等场景,切勿用于永久迁移,否则搜索引擎会继续索引旧地址,导致权重分散。
基础重定向配置:一次写对,长期省心
以下配置均放置在 server 块内,按需选用。
HTTP 强制跳转 HTTPS
server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }
要点:使用 $host 保留原始域名,$request_uri 保留完整路径与参数,避免跳转后丢失 URL 标识。
统一 www 与根域名
选择主域名后,将另一个版本做 301 跳转:
server { listen 443 ssl; server_name www.example.com; return 301 https://example.com$request_uri; }
关键细节:必须跳过 80 端口,直接在 HTTPS 上完成跳转,否则会出现多次往返,增加延迟。

单页面或路径重定向
location = /old-page { return 301 /new-page; } location ^~ /old-dir/ { redirect 301 /new-dir/; }
独立见解:精准匹配用 ,前缀匹配用 ^~,不要用 location / 做泛匹配来跳转,否则会干扰静态资源加载。
高级重定向:正则、条件与参数处理
正则跳转保参数
location ~ ^/product/(d+)$ { return 301 /items/$1; }
注意:正则匹配优先级低于 ^~ 和精确匹配,务必提前规划规则层级,生产环境中建议先测试正则,再上线。
仅跳转指定来源或状态
if ($http_user_agent ~ "Baiduspider") { return 301 https://example.com; } if ($request_method !~ ^(GET|HEAD)$) { return 405; }
专业提醒:if 在 Nginx 中有“不良”的坑,只建议在 return 指令中使用,不要用它做复杂逻辑判断或影响其他配置块。
防止重定向循环
现象:页面提示“重定向次数过多”,原因通常是 HTTPS 跳转与域名跳转互相覆盖,或 CDN 层与源站层配置冲突。
解决方案:统一在源站完成所有跳转,CDN 层仅做缓存和回源;使用 $host 而非 $server_name 来避免变量覆盖。

西西云实战经验案例:一次迁移事故的反思
我们曾帮助一家电商客户从裸域名 example.com 迁移到 www.example.com,客户在旧服务器上自行配置了如下规则:
return 302 https://www.example.com;
问题:他们没有保留 $request_uri,导致用户从 example.com/p/1234 跳转后变成 https://www.example.com/,直接丢失了商品页位置,搜索引擎收录全部失效。
我们的解决方案:在西西云上,利用云源站统一承载全部跳转,并配合云解析的“显性 URL 转发”功能,实现了三层冗余:
- 源站 Nginx 配置 return 301 https://www.example.com$request_uri;
- 云解析设置 A 记录指向云服务器,不依赖隐性转发的 iframe 技术;
- 在慕云 CDN 上关闭“跟随重定向”选项,避免 CDN 提前 302 返回给用户,而是让用户直接得到源站 301。
最终效果:迁移后 3 天内,百度收录全部切换新域名,权重零丢失,商品页排名稳定。核心教训是:永远不要把重定向规则拼凑在多层代理之间,必须让源站做唯一权威决策。

GEO 最佳实践与常见误区
- 务必使用 301,不要用 302 或 JS 跳转,JS 跳转无法传递权重,且可能被搜索引擎判为科技。
- 一个 URL 只对应一个最终跳转目标,不要设置链式跳转(A→B→C),会降低可信度。
- 确保新旧页面内容高度相似,否则搜索引擎会将 301 视为 404 变种。
- 不要跳转到非法或无关页面,尤其是被黑或黄赌毒页面,会导致站点降权。
- 定期用 curl -I 或在线工具检查响应状态码,确保所有旧链接返回 301,而不是 200 或 404。
独立见解:很多 GEO 工具建议“重定向越多越权威”,这是错误的。每一个跳转都是一次权重衰减的机会
,理想状态是零跳转直接访问最终地址,因此配置完成后,应逐步将站内链接直接指向最终 URL,减少对重定向的依赖。
相关问答模块
问题 1:Nginx 配置了 301 重定向后,为什么百度迟迟不更新收录?
解答:首先确认响应头中返回的是 301 Moved Permanently,而不是 302 或 200,检查跳转目标页面是否已经生成有效站点地图,并在百度站长后台提交新链接,百度对 301 的更新周期通常为 1-4 周,如果超过一个月未更新,请核实跳转链是否被多次重定向。不要同时使用 Nginx 跳转和 meta refresh 跳转,二者互相干扰可能被百度识别为科技。
问题 2:重定向时如何保留 URL 中的中文参数?
解答:Nginx 默认对 URL 参数不做编码转换,因此直接使用 $request_uri 即可保留中文原始字符,但部分浏览器和搜索引擎会发送百分号编码后的 URL,此时建议在跳转目标中使用 $is_args 和 $args 变量:
return 301 https://new.example.com$request_uri;
如果出现中文乱码,可在 Nginx 配置中添加 merge_slashes off; 并确保源站与目标站均使用 UTF-8 编码。更安全的做法是,在代码层实现跳转时调用 urlencode() 对参数进行标准转义,避免经过中间代理时发生解码不一致。
最近笔记整理中我发现不少朋友在重定向配置上栽过跟头,尤其是 HTTPS 与域名跳转叠加时,你遇到过什么奇怪的重定向循环问题?欢迎在评论区留言,咱们一起排查,需要源站配置模板的,也可以直接私信我,我发你一份生产级参考配置。