如何让Nginx重写惰性(非贪婪)

Dom*_*que 2 regex nginx url-rewriting

我对 Nginx 进行了这样的重写:

rewrite ^\/.+\/.+\/((?:css|img|includes|js|vendor|template)\/.+)?$ /$1 last;
Run Code Online (Sandbox Code Playgroud)

以下网址:

foo/bar/vendor/datetimepicker/css/datetimepicker.css
Run Code Online (Sandbox Code Playgroud)

被重定向到

css/datetimepicker.css
Run Code Online (Sandbox Code Playgroud)

代替

vendor/datetimepicker/css/datetimepicker.css
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它从头开始而不是只捕获最后一部分?

我发现解决方案可能是使表达式非贪婪,但我尝试的一切都失败了(在所有不同的位置添加了?,添加了 /U...)

Ric*_*ith 5

如果您知道 URI 仅包含两个前导路径元素,请使用排除该字符的字符类/(例如[^/])。

例如:

^/[^/]+/[^/]+/((?:css|img|includes|js|vendor|template)/.+)?$
Run Code Online (Sandbox Code Playgroud)

但是,如果您有两个或多个前导路径元素,并且需要使它们非贪婪,请使用运算符代替+?运算符+

例如:

^/.+?/.+?/((?:css|img|includes|js|vendor|template)/.+)?$
Run Code Online (Sandbox Code Playgroud)

或者甚至是上述的混合:

^/[^/]+/.+?/((?:css|img|includes|js|vendor|template)/.+)?$
Run Code Online (Sandbox Code Playgroud)