Nginx重写部分url

Nginx重写部分url,nginx,url-rewrite-module,Nginx,Url Rewrite Module,我有以下网址: 并希望将其改写为: 介于(10103)之间的数字可以更改,图像名称也可以更改。我尝试了以下nginx重写规则: rewrite ^/img/products/(.+)$/f /img/products/$1 last; 为什么现在可以工作?当前的重写规则正在匹配 ^/img/products/(.+)$/f 这意味着URL路径以/img/products/开始,然后是任何内容,URL结束,然后是/f。这永远不会匹配一行,因为您使用的是美元符号,表示行的结尾,然后在后面有字

我有以下网址:

并希望将其改写为:

介于(10103)之间的数字可以更改,图像名称也可以更改。我尝试了以下nginx重写规则:

rewrite ^/img/products/(.+)$/f /img/products/$1 last;

为什么现在可以工作?

当前的重写规则正在匹配

^/img/products/(.+)$/f
这意味着URL路径以
/img/products/
开始,然后是任何内容,URL结束,然后是
/f
。这永远不会匹配一行,因为您使用的是美元符号,表示行的结尾,然后在后面有字符

如果你想匹配

/img/products/10103/f/10103-s-1.jpg

您必须将其更改为
^/img/products/(.+)$
,但由于要提取您正在查找的两个id组,因此必须将其替换为
^/img/products/(.+)/f/(.+)$
,然后将其替换为
/img/products/$1/$2
。正如您在评论中所发布的。

我不熟悉nginx,但对我来说它看起来像一个正则表达式,
$
表示行尾,当您从find表达式中删除
$
符号时会发生什么?我相信您是对的。另外,我相信在重写之后,最后一点被切断了。我现在把它改成这样,它可以工作了:最后重写^/img/products/(.*)/f/(.*)$/img/products/$1/$2;