Nginx的rewrite模块用于实现URL重写和重定向。以下是常见的rewrite配置详解:

1. rewrite指令

  • 语法: rewrite regex replacement [flag];

  • 作用: 根据正则表达式匹配URL,并将其重写为指定的URL。

  • 参数:

    • regex: 正则表达式,用于匹配请求的URL。

    • replacement: 替换的URL。

    • flag: 可选参数,用于控制重写行为。

常用flag:

  • last: 停止处理当前rewrite指令,并重新匹配新的URL。

  • break: 停止处理当前rewrite指令,不再匹配其他rewrite规则。

  • redirect: 返回302临时重定向。

  • permanent: 返回301永久重定向。

示例:

rewrite ^/old-url$ /new-url permanent;

/old-url永久重定向到/new-url

2. return指令

  • 语法: return code [text];return code URL;

  • 作用: 直接返回指定的HTTP状态码,并可选择返回文本或重定向URL。

示例:

return 301 /new-url;

返回301状态码,并将请求重定向到/new-url

3. if指令

  • 语法: if (condition) { ... }

  • 作用: 根据条件执行特定的rewrite规则。

示例:

if ($host = 'example.com') {
    rewrite ^/(.*)$ http://www.example.com/$1 permanent;
}

如果请求的hostexample.com,则将其重定向到www.example.com

4. location指令

  • 语法: location [modifier] uri { ... }

  • 作用: 根据请求的URI匹配特定的配置块,并在其中使用rewrite规则。

示例:

location /old-path {
    rewrite ^/old-path/(.*)$ /new-path/$1 break;
}

/old-path/下的所有请求重写到/new-path/

5. 常见应用场景

  • 强制HTTPS:

    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
  • 去除www前缀:

    if ($host ~* "^www\.(.*)$") {
        return 301 $scheme://$1$request_uri;
    }
  • URL美化:

    rewrite ^/product/([0-9]+)$ /product.php?id=$1 last;

6. 注意事项

  • 避免过度使用if指令,因为它可能导致性能问题。

  • 使用rewrite时,注意正则表达式的性能影响。

  • 尽量使用return指令进行简单的重定向,而不是复杂的rewrite规则。

通过合理配置rewrite规则,可以实现灵活的URL重定向和重写功能。

本篇文章内容来源于:Nginxrewrite重定向配置详解