一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 如何在 Location 块中配置 return 指令实现永久 301 域名重定向

时间:2026-09-04 19:10:49 编辑:袖梨 来源:一聚教程网

域名跳转必须在server块中用return 301实现,因server_name才能准确识别请求域名;location仅匹配路径,无法处理跨域跳转,除非是单页面精确路径跳转(如location = /old.html { return 301 /new.html; })。

直接在 location 块里用 return 301 实现域名重定向,不推荐且通常无效——因为 location 匹配的是请求路径(如 /old.html),不是整个域名;而域名跳转必须基于 server_name 判断,应在 server 块层面处理。

真正可靠的做法是:把域名级 301 跳转写在独立的 server 块中,而不是 location。下面说清楚怎么操作、为什么不能放 location,以及例外场景怎么处理。

域名跳转必须放在 server 块里

Nginx 的 server_name 指令决定了哪个 server 块响应某个域名的请求。只有在这里,你才能准确捕获“用户访问的是 old-site.com”这件事。

  1. ✅ 正确位置:server { listen 80; server_name old-site.com www.old-site.com; return 301 https://new-site.com$request_uri; }
  2. ❌ 错误做法:在 location / { ... } 里写 return 301 —— 这只能跳转路径,无法改变 Host 头或协议,浏览器地址栏仍显示旧域名。

原因很简单:location 是路径匹配器,它不知道请求来自哪个域名(除非配合 if ($host = ...),但 iflocation 中受限且易出错)。

单页面路径跳转才适合用 location + return

如果你只想跳转某一个 URL 路径(比如 /old.html → /new.html),这时 location 才是合适位置:

location = /old.html {return 301 /new.html;}

注意:

  1. = 表示精确匹配,避免 /old.html?x=1/old.html-bak 被误匹配
  2. 目标路径不带协议和域名,属于内部重定向(浏览器地址栏会变,但仍是同域名)
  3. 若需跨域名跳转,这里必须写完整 URL:return 301 https://new-site.com/new.html;

多域名统一跳转的简洁写法

多个旧域名指向同一个新站,不用每个都写一个 server 块:

server {listen 80;server_name old1.com old2.com www.old1.com example-old.net;return 301 https://www.new-site.com$request_uri;}
  1. 所有列出的域名命中即跳转
  2. $request_uri 自动保留原始路径和查询参数(如 /blog?id=123/blog?id=123
  3. 不要用 $host,防止 IP 直连或非法 Host 头导致跳转到 https:///xxx

HTTPS 跳转要单独配 80 端口 server 块

别试图在监听 443 的 HTTPS server 块里加 listen 80 —— Nginx 不允许混用协议。

正确结构是两套 server

  1. 一套只 listen 80,负责把所有 HTTP 请求 301 到 HTTPS
  2. 另一套 listen 443 ssl,提供真正的 HTTPS 服务
# HTTP 入口,仅跳转server {listen 80;server_name example.com www.example.com;return 301 https://www.example.com$request_uri;}# HTTPS 服务,实际响应内容server {listen 443 ssl http2;server_name www.example.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;# ... 其他配置}

配置完记得:

  1. nginx -t 检查语法
  2. nginx -s reload 生效
  3. curl -I http://old-site.com 确认返回 301 Moved Permanently 和正确的 Location

热门栏目