Nginx 重写规则指南:从基础到高级用

在 Nginx 中,URL 地址重写通常通过使用 rewrite 指令来实现。rewrite 指令允许你根据特定的模式匹配来修改请求的 URL,通常用于实现伪静态、SEO 友好的 URL 或重定向。

图片[1]_Nginx 重写规则指南:从基础到高级用_知途无界

以下是一些常见的 URL 重写示例:

基本示例

假设你有一个请求 http://example.com/old-page,你希望将其重写为 http://example.com/new-page。可以在 Nginx 配置文件中使用如下配置:

server {
    listen 80;
    server_name example.com;

    location / {
        rewrite ^/old-page$ /new-page permanent;
    }
}
  • ^/old-page$:正则表达式,匹配以 /old-page 结尾的 URL。
  • /new-page:重写后的目标 URL。
  • permanent:表示这是一个 301 永久重定向。如果你希望是临时重定向,可以使用 redirect

使用正则表达式进行动态重写

假设你希望将 URL 中的某些部分动态重写。例如,将所有形如 /product/123 的请求重写为 /product-details.php?id=123

server {
    listen 80;
    server_name example.com;

    location / {
        rewrite ^/product/(\d+)$ /product-details.php?id=$1 last;
    }
}
  • ^/product/(\d+)$:正则表达式,匹配 /product/ 后跟一个或多个数字。
  • /product-details.php?id=$1:重写后的 URL,其中 $1 是正则表达式中第一个捕获组(即数字部分)。
  • last:表示重写后停止继续处理其他 rewrite 指令,并开始处理新的 URL。

内部重写(不改变浏览器地址栏)

如果你希望重写 URL 但不改变浏览器地址栏(即内部重写),可以省略重定向标志:

server {
    listen 80;
    server_name example.com;

    location / {
        rewrite ^/short-url$ /long-url-path break;
    }

    location /long-url-path {
        # 处理实际请求的逻辑
    }
}
  • break:停止处理 rewrite 指令,并继续在当前 location 中处理请求。

注意事项

  1. 顺序rewrite 指令在 location 块中的顺序很重要,因为 Nginx 会按顺序处理它们。
  2. 性能:过多或复杂的 rewrite 规则可能会影响性能,尤其是在高流量环境中。
  3. 调试:在调试 rewrite 规则时,可以使用 error_log 指令来记录重写过程,帮助排查问题。

通过这些示例,你可以在 Nginx 中实现各种 URL 重写需求,提升网站的可用性和用户体验。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞64 分享
I only wish to face the sea, with spring flowers blossoming.
我只愿面朝大海,春暖花开
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容