Nginx 重写与跳转规则详解:Rewrite 与 Redirect 的区别与用法

阅读:14 2025-07-21

本文来自「码农资讯网」,专注 DevOps、PHP、数据库、系统运维干货。访问:www.codesou.cn,学习更多实战技巧。

微信截图_20250718172543.png


一、前言

在实际的 Web 项目中,我们常常会遇到需要 URL 重写跳转 的场景,比如:

  • 将旧路径重定向到新路径

  • SEO 友好的 URL 优化

  • HTTP 跳转到 HTTPS

  • www 跳转到非 www(或反之)

Nginx 提供了强大的 rewritereturn 指令,帮助我们轻松实现这些功能。


二、rewrite 与 redirect 的区别

功能点rewriteredirect(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 模块实现更灵活的规则控制


标签: Nginx
声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!