nginx地址跳转
nginx地址跳转全指南:301/302怎么选?rewrite配置实战
在网站运维或开发中,地址跳转是常见需求:可能是域名升级(如从old.com到new.com)、路径重构(如从/blog/old到/blog/new),或是SEO优化(动态URL转静态URL)。Nginx作为主流Web服务器,提供了灵活的地址跳转功能,核心依赖return指令和rewrite模块。本文将从基础原理到实战配置,带你掌握Nginx跳转的关键技巧。
为什么需要地址跳转?
地址跳转本质是“引导用户/搜索引擎从旧地址访问新地址”,常见场景包括:
- 域名变更:企业更换域名时,需将旧域名流量永久导向新域名;
- 路径调整:网站重构时,旧路径(如
/post/123)迁移到新路径(如/article/123); - SEO优化:动态URL(如
/news.php?id=123)转为静态URL(如/news/123.html),提升搜索引擎抓取效率; - 用户体验:临时维护时,将用户访问的旧页面跳转到维护提示页。
301 vs 302:选对状态码是关键
HTTP状态码中,301(永久重定向)和302(临时重定向)是跳转核心。两者的核心区别影响搜索引擎和用户体验:
- 301:永久重定向,搜索引擎会将旧URL权重转移到新URL,适合域名永久变更、路径永久调整;
- 302:临时重定向,搜索引擎不更新旧URL索引,仅临时指向新地址,适合页面临时迁移(如活动页跳转)。
方法一:return指令——最简单的跳转方式
return指令是Nginx中最直接的跳转方式,语法简洁,适合简单场景(如域名跳转、固定路径跳转)。
基础配置示例
1. 域名永久跳转(301)
假设旧域名为old.com,需永久跳转到new.com:
server {
listen 80;
server_name old.com www.old.com; # 匹配所有old.com相关域名
return 301 $scheme://new.com$request_uri; # 永久跳转到新域名,保留原路径
}
$scheme:获取协议(http/https),避免跳转时协议丢失;$request_uri:保留原始请求路径(含参数),确保用户访问的具体页面完整跳转。
2. 路径临时跳转(302)
若仅临时将/temp路径跳转到/maintenance:
location /temp {
return 302 /maintenance; # 临时跳转到维护页,302状态码
}
方法二:rewrite模块——复杂场景的灵活处理
rewrite模块支持正则匹配,可实现路径替换、参数处理、动态转静态等复杂需求。语法为:
rewrite <正则规则> <目标路径> [flag];
- 正则规则:匹配原始URL路径(如
^/blog/(\d+)\.html$); - 目标路径:跳转后的新路径(可含
$1等捕获组,如/blog/$1); - flag参数:
last(停止当前location的rewrite匹配,继续匹配新location)、break(停止当前rewrite,直接返回结果)、redirect(302临时跳转)、permanent(301永久跳转)。
实战场景1:动态参数转静态路径
将带参数的动态URL(如/news.php?id=123)转为静态URL(/news/123.html):
server {
location ~ \.php$ {
rewrite ^/news\.php\?id=(\d+)$ /news/$1.html permanent; # 永久跳转
}
}
实战场景2:路径前缀迁移
将/old-path下的所有路径迁移到/new-path(保留路径结构):
rewrite ^/old-path/(.*)$ /new-path/$1 last; # 用$1捕获原路径,last避免死循环
实战场景3:带条件跳转(如www域名转非www)
将带www的域名跳转到不带www的域名(301永久跳转):
server {
server_name www.old.com;
if ($host ~* ^www\.(.*)$) {
return 301 https://$1$request_uri; # 提取非www部分作为新域名
}
}
避坑指南:常见配置错误
- 正则匹配不精准:需用
^(开头)和$(结尾)限定匹配范围,避免意外匹配其他路径; - flag参数混用:
last和break仅在rewrite模块内生效,不可跨location块; - 无限循环:若rewrite规则未加
break或last,可能导致路径循环跳转(如/a跳转到/b,/b又跳转到/a); - 协议不统一:
$scheme需确保跳转前后协议一致(如http跳https需加https://前缀)。
总结
Nginx地址跳转核心依赖return和rewrite:
- 简单场景(域名/路径固定跳转):优先用
return,配置简洁; - 复杂场景(动态匹配/参数处理):用
rewrite正则匹配+flag参数; - SEO敏感场景:必选301永久跳转,确保索引更新。

配置后需通过nginx -t检查语法,并用浏览器或curl -I(查看响应头)验证跳转状态码是否正确,避免线上故障。掌握这些技巧,可轻松应对各类地址跳转需求。

上一篇




