一、什么是 Nginx 里的重定向¶
原笔记把这部分放在“rewrite 功能”章节里,但开头先说明了一个更大的背景:
重定向也叫 URL 重定向、URL 改写。
常见需求包括:
http跳到https- 新老域名互相跳转
- 按客户端类型跳转到移动端或 PC 端
- 调整 URL 结构做伪静态
而在这些场景里,最简单直接的手段之一就是 return。
二、return 指令的两种基本写法¶
原笔记对 return 给出了两种格式:
return code URL;
表示:
- 返回一个状态码
- 同时给出新的 URL
另一种是:
return code;
表示:
- 只返回指定状态码
原笔记还指出,return 可以放在:
serverlocationif
这也是它非常灵活的原因。
三、案例一:把一个域名直接跳转到另一个网站¶
原笔记的第一个案例是:
- 域名:
rewrite.oldboylinux.cn - 访问后直接跳转到百度
配置如下:
server {
listen 80;
server_name rewrite.oldboylinux.cn;
return 301 http://www.baidu.com;
}
这个配置的意思非常直接:
- 只要命中这个
server - 就不再进入普通站点逻辑
- 直接返回
301和新的Location
原笔记用 curl -Lv 验证后,能清楚看到:
- 先返回
HTTP/1.1 301 Moved Permanently - 再根据
Location去请求新的地址
这就是标准的域名跳转流程。
四、案例二:访问 /admin/ 时直接返回 403¶
原笔记的第二个案例把 return 放到了 location 中,用来拦截后台目录:
server {
listen 80;
server_name rewrite.oldboylinux.cn;
root /app/code/rewrite;
error_log /var/log/nginx/rewrite-error.log notice;
access_log /var/log/nginx/rewrite-access.log main;
location / {
index index.html;
}
location /admin/ {
return 403;
}
}
配套测试文件如下:
mkdir -p /app/code/rewrite/admin
echo rewrite index > /app/code/rewrite/index.html
echo admin index > /app/code/rewrite/admin/index.html
测试结果是:
- 访问根目录时返回正常首页
- 访问
/admin/时直接返回403 Forbidden
这个案例说明,return 不只是做跳转,也非常适合做简单的访问拒绝。
五、为什么 return 适合做简单控制¶
从原笔记两个案例可以看出,return 的最大特点是:
- 简单
- 直接
- 不需要复杂正则
因此它特别适合以下类型的需求:
- 老域名跳到新域名
- 某个 URI 直接禁止访问
- 某些条件下直接返回状态码
http -> https的基础跳转
原笔记里也提到,后续 HTTPS 章节里还会继续讲 HTTP 到 HTTPS 的跳转场景。
六、和 rewrite 相比,什么时候优先考虑 return¶
虽然这一章后面还会讲 rewrite,但从原笔记的编排顺序也能看出来:
- 如果只是简单跳转到一个固定新地址
- 或者直接返回某个状态码
那通常优先考虑 return,因为它比 rewrite 更直接、更容易读懂。
只有在你需要:
- 基于 URI 做正则匹配
- 保留原路径的一部分
- 做更复杂的改写逻辑
时,才更适合使用 rewrite。
七、小结¶
return 可以理解成 Nginx 里最直接的“终止并给结果”的指令。
原笔记这两个案例已经覆盖了它最常见的两个用途:
return 301 新地址;用于跳转return 403;用于拦截
当需求足够简单时,优先用 return,往往比一上来就写复杂 rewrite 更清晰。