Nginx 301重定向核心是逐页精准映射旧URL到新URL,保留路径与参数以保SEO;推荐用return 301而非rewrite,按域名级、页面级、根路径级三类场景配置,并避坑if判断与未测试参数丢失。

企业官网改版时,Nginx 的 301 重定向核心目标是:把旧 URL 全部、精准、无损地映射到新 URL,同时保留路径结构和查询参数,避免 SEO 权重流失和用户 404。 关键不是“全站跳一个首页”,而是“逐页对应迁移”。
域名级统一跳转(比如 old.com → new.com)
适用于主域名整体更换。推荐用 return 301,简洁高效、性能好、语义明确:
server {
listen 80;
server_name old.com www.old.com;
return 301 https://www.new.com$request_uri;
}-
$request_uri自动携带原始路径 + 查询参数(如/products?id=123→/products?id=123) - 不要用
rewrite ... permanent套一层,return更直接、更安全 - 如果新站只走 HTTPS,这里直接跳
https://...,一步到位
页面级精确映射(旧路径 → 新路径)
适用于目录结构调整、URL 规范化或页面合并。用 location + return 301 或 rewrite:
server {
listen 80;
server_name www.new.com;
# 单页迁移:/about.html → /company/
location = /about.html {
return 301 /company/;
}
# 目录迁移:/news/xxx → /blog/xxx
location ^~ /news/ {
rewrite ^/news/(.*)$ /blog/$1 permanent;
}
# 去掉 .php 后缀(旧:/contact.php → 新:/contact)
location ~ \.php$ {
rewrite ^(/.*?)(?:\.php)(\?.*)?$ $1$2 permanent;
}
}-
location = /path精确匹配单个 URI,效率最高 -
location ^~ /prefix/匹配前缀,适合批量目录迁移 -
rewrite后加permanent明确发出 301 状态码 - 注意正则捕获组
$1、$2的使用,确保参数不丢
根路径单独跳转(首页迁移,其他路径不变)
常见于品牌官网用新域名做首页入口,但保留旧域名下子频道(如 /career/、/download/)继续运行:
server {
listen 80;
server_name old.com www.old.com;
# 仅根路径跳转
location = / {
return 301 https://www.new.com/;
}
# 其他所有路径照常处理(不跳转)
location / {
proxy_pass http://backend; # 或 root /var/www/old-site;
try_files $uri $uri/ =404;
}
}-
location = /只匹配/,不会影响/products、/contact-us等 - 配合
location /处理其余请求,避免误跳
常见避坑提醒
- ❌ 不要用
if ($host = old.com) { rewrite ... }—— Nginx 官方明确标注为 错误、低效、易出错 的写法 - ✅ 优先用
return 301而非rewrite ... permanent,语义清晰、执行更快、无隐式循环风险 - ✅ 所有跳转务必测试带参数的 URL(如
?utm_source=ad),确认$request_uri是否完整保留 - ✅ 修改配置后,先
nginx -t检查语法,再systemctl reload nginx(非 restart),避免服务中断 - ✅ 上线后用 curl 或浏览器开发者工具验证响应头:
HTTP/1.1 301 Moved Permanently+Location: ...
不复杂但容易忽略


















