Nginx 重写与跳转规则详解:Rewrite 与 Redirect 的区别与用法
阅读:14 2025-07-21
本文来自「码农资讯网」,专注 DevOps、PHP、数据库、系统运维干货。访问:www.codesou.cn,学习更多实战技巧。
一、前言
在实际的 Web 项目中,我们常常会遇到需要 URL 重写 或 跳转 的场景,比如:
将旧路径重定向到新路径
SEO 友好的 URL 优化
HTTP 跳转到 HTTPS
www 跳转到非 www(或反之)
Nginx 提供了强大的 rewrite
与 return
指令,帮助我们轻松实现这些功能。
二、rewrite 与 redirect 的区别
功能点 | rewrite | redirect(return) |
---|---|---|
作用 | 修改请求的 URI | 告诉客户端重定向到新地址 |
是否跳转 | 不跳转,内部重定向 | 跳转,客户端地址栏改变 |
是否发送 3xx | 否(除非结合 redirect 使用) | 是 |
常见状态码 | - | 301、302 |
SEO 友好性 | ✅(内部结构优化) | ✅(正确使用 301 时) |
三、常见 rewrite 用法
1. 将 URL 重写为带 .php
将 /user/123
重写为 /user.php?id=123
:
location /user/ { rewrite ^/user/(\d+)$ /user.php?id=$1 last; }
last
: 表示重新进入 location 匹配,常用于 URL 重写。
2. 将 URL 统一转发到单入口
例如 ThinkPHP、Laravel、WordPress 等框架:
location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?$1 last; } }
四、常见 redirect 跳转配置
1. 301 永久重定向
return 301 https://www.codesou.cn$request_uri;
用途:
HTTP → HTTPS
非 www → www
旧域名 → 新域名
2. 将某页面跳转到新地址
location = /old.html { return 301 /new.html; }
3. 强制 HTTPS 跳转
server { listen 80; server_name www.codesou.cn; return 301 https://$server_name$request_uri; }
五、rewrite flag 参数说明
标志 | 说明 |
---|---|
last | 重新进行 location 匹配,常用于跳转控制器逻辑 |
break | 停止匹配,继续在当前 location 执行 |
redirect | 临时重定向(302) |
permanent | 永久重定向(301) |
六、实战案例:统一跳转到 www + HTTPS
server { listen 80; server_name codesou.cn; return 301 https://www.codesou.cn$request_uri; } server { listen 443 ssl; server_name www.codesou.cn; # SSL 配置略 location / { root /www/wwwroot/codesou; index index.html index.php; } }
七、总结
rewrite
更适合内部路由处理return
更适合对外跳转与 SEO 优化配置规则要保持简洁清晰,避免循环跳转
对于大型站点建议结合
map
模块实现更灵活的规则控制
声明
1、部分文章来源于网络,仅作为参考。 2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!