Nginx 实现域名跳转的几种方式
在 Nginx Web 服务器层实现域名跳转的几种常用方式。主要包括 301 永久重定向用于 SEO 场景和域名迁移,302 临时重定向用于活动页或短链,强制 HTTPS 跳转保障安全,以及处理 www 与非 www 域名的统一。此外还讲解了通过正则匹配实现复杂路径改写的方案,并对比了 301 与 302 在缓存机制和搜索引擎权重上的区别。核心结论是优先使用 Nginx 配置跳转以提升性能和 SEO 友好度。

在 Nginx Web 服务器层实现域名跳转的几种常用方式。主要包括 301 永久重定向用于 SEO 场景和域名迁移,302 临时重定向用于活动页或短链,强制 HTTPS 跳转保障安全,以及处理 www 与非 www 域名的统一。此外还讲解了通过正则匹配实现复杂路径改写的方案,并对比了 301 与 302 在缓存机制和搜索引擎权重上的区别。核心结论是优先使用 Nginx 配置跳转以提升性能和 SEO 友好度。


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online
在日常项目中,我们经常会遇到这样的需求或情况:
http://abc.com 时,强制跳到 https://www.abc.com,上面域名发生变化。old.com 迁移到 new.com,用户访问旧域名时需要自动跳转。abc.com 和 www.abc.com 最终都要跳到同一个主域名。对于域名跳转,可以在 Web 服务器层 实现,也可以在 应用层中 实现。下面主要讲解在 Web 服务层 Nginx 中的实现方式。
这些场景在 Nginx 中都可以很优雅地实现,如下:
如果网站更换了域名,或者需要强制统一入口,可以用 301 永久重定向。
server {
listen 80;
server_name old.com;
# 永久重定向到新域名,并保留路径和参数
return 301 https://new.com$request_uri;
}
📌 说明:
301:告诉浏览器和搜索引擎,这是永久跳转,搜索引擎会更新索引。$request_uri:保留原路径和查询参数,比如 /about?from=123。示例效果:访问 http://old.com/about → 自动跳到 https://new.com/about
演示配置:本地项目跳转百度链接的 demo,实际项目中可以根据实际情况进行配置。
server {
listen 80;
server_name localhost;
# 永久重定向到新域名
return 301 https://www.baidu.com;
}
如果只是临时跳转(例如活动推广、临时域名),可以使用 302。
server {
listen 80;
server_name promo.old.com;
# 临时跳转,不会影响搜索引擎索引
return 302 https://event.new.com$request_uri;
}
📌 说明:
302:临时跳转,搜索引擎不会更新索引。为了保证安全,通常会把所有 HTTP 请求跳转到 HTTPS。
server {
listen 80;
server_name www.abc.com;
return 301 https://www.abc.com$request_uri;
}
📌 效果:访问 http://www.abc.com/login → 自动跳到 https://www.abc.com/login
www很多公司会要求所有请求统一成 www.abc.com 或 abc.com,这样可以避免 SEO 重复收录。
www → 跳到裸域名server {
listen 80;
server_name www.abc.com;
return 301 https://abc.com$request_uri;
}
wwwserver {
listen 80;
server_name abc.com;
return 301 https://www.abc.com$request_uri;
}
有时候旧域名和新域名的路径不一样,可以用正则匹配。
server {
listen 80;
server_name old.com;
location /oldpath/(.*) {
return 301 https://new.com/newpath/$1;
}
}
📌 效果:访问 http://old.com/oldpath/123 → 跳到 https://new.com/newpath/123
在日常项目中,推荐优先使用 Nginx 配置跳转,因为:
301/302 语义明确,对 SEO 和用户体验都更友好。常见实践:
301302从 用户体验 来看:
从 底层逻辑 来看:
📌 总结:
return 302 https://event.new.com$request_uri; 是否是固定写法这不是唯一写法,但这是最常见、最简洁的写法。
return 302 → 表示返回一个 302 临时重定向 状态码。https://event.new.com → 目标域名。$request_uri → 变量,代表原始请求的路径和参数。用户请求:
http://promo.old.com/sale?from=wechat
Nginx 配置:
return 302 https://event.new.com$request_uri;
跳转结果:
https://event.new.com/sale?from=wechat
return 302 https://event.new.com;
👉 无论用户访问什么路径,都直接跳到 https://event.new.com 首页。
location /oldpath/(.*) {
return 302 https://event.new.com/newpath/$1;
}
👉 http://old.com/oldpath/123 → https://event.new.com/newpath/123
✅ 所以:
return 302 https://event.new.com$request_uri; 只是最常见的写法(保留路径和参数)。