我知道有很多这样的例子,但我只是想确认一下。不幸的是,我无法在接下来的几天内测试这一点,所以我在这里询问。
此位置的重写等效项是什么?
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
。我怀疑这不是你想要的工作方式,因此我建议你使用+
而不是,*
并在正则表达式中添加起始 (^) 和结束 ($) 锚点。