Nginx 重写与跳转规则详解:Rewrite 与 Redirect 的区别与用法
码农资讯网 阅读:179 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处理!







