nginx重写整个request_uri

我知道有很多这样的例子,但我只是想确定。 不幸的是我不能在接下来的几天内testing这个,所以我在这里问。

什么是这个位置的重写相当于?

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

我想基本上重写整个传入的请求,除了regex的部分。

我认为这是但我不确定:

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

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

谢谢

我不打扰在这里rewrite ,因为它只是nginx的额外工作…

但是,可以简单地使用以下内容:

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

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

还有一点,你的正则expression式有点松散。 它匹配例如/sdhfdsah/v1/device/something/ajkldfkadsfjh/sdfhahfd/file.html 。 此外,它匹配/v1/device//something 。 我怀疑这是你打算如何工作,所以我build议你使用+而不是* ,并将开始(^)和结束($)锚定到正则expression式。