nginx 重写整个 request_uri

nginx 重写整个 request_uri

我知道有很多这样的例子,但我只是想确认一下。不幸的是,我无法在接下来的几天内测试这一点,所以我在这里询问。

此位置的重写等效项是什么?

location ~* /v1/device/(.*)/ { 
  proxy_pass http://api.domain.com/api/v1.0/download/$1; 
} 

我想从本质上重写除正则表达式部分之外的整个传入请求。

我认为是这个但我不确定:

location ~* /v1/device/(.*)/ { 
 rewrite ^/v1/device/(.*)/ /api/v1.0/download/$1 break; 
 proxy_pass http://api.domain.com; 
}

想知道是否有更干净的方法,而我不需要在重写规则中重复 /v1/device/。

谢谢

答案1

我不会在rewrite这里打扰,因为这对于 nginx 来说只是额外的工作......

但是,可以简单地使用以下命令:

location ~* /v1/device/(?<part>.*)/ {
    rewrite ^ /api/v1.0/download/$part break;
    proxy_pass http://api.domain.com;
}

我们可以使用最短的匹配任何字符串作为重写条件,因为该条件已在location块中匹配。我们还将所需部分捕获到变量中$part,然后将其用于目标。

还有一点,你的正则表达式有点松散。它匹配例如/sdhfdsah/v1/device/something/ajkldfkadsfjh/sdfhahfd/file.html。此外,它匹配/v1/device//something。我怀疑这不是你想要的工作方式,因此我建议你使用+而不是,*并在正则表达式中添加起始 (^) 和结束 ($) 锚点。

相关内容