Regex 如何使Nginx重写懒惰(非贪婪)

Regex 如何使Nginx重写懒惰(非贪婪),regex,nginx,url-rewriting,Regex,Nginx,Url Rewriting,我对Nginx进行了如下重写: rewrite ^\/.+\/.+\/((?:css|img|includes|js|vendor|template)\/.+)?$ /$1 last; 以下网址: foo/bar/vendor/datetimepicker/css/datetimepicker.css 被重定向到 css/datetimepicker.css 而不是 vendor/datetimepicker/css/datetimepicker.css 我怎样才能让它从一开始就捕捉,而

我对Nginx进行了如下重写:

rewrite ^\/.+\/.+\/((?:css|img|includes|js|vendor|template)\/.+)?$ /$1 last;
以下网址:

foo/bar/vendor/datetimepicker/css/datetimepicker.css
被重定向到

css/datetimepicker.css
而不是

vendor/datetimepicker/css/datetimepicker.css
我怎样才能让它从一开始就捕捉,而不是仅仅是最后一部分


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

如果您知道URI只包含两个前导路径元素,请使用不包含
/
字符的字符类(例如
[^/]

例如:

^/[^/]+/[^/]+/((?:css|img|includes|js|vendor|template)/.+)?$
^/.+?/.+?/((?:css|img|includes|js|vendor|template)/.+)?$
但是,如果您有两个或多个前导路径元素,并且需要使它们非贪婪,请使用
+?
运算符代替
+
运算符

例如:

^/[^/]+/[^/]+/((?:css|img|includes|js|vendor|template)/.+)?$
^/.+?/.+?/((?:css|img|includes|js|vendor|template)/.+)?$
或者甚至是上述各项的混合:

^/[^/]+/.+?/((?:css|img|includes|js|vendor|template)/.+)?$
使用指令

rewrite ^/[^/]+/[^/]+/(css|img|includes|js|vendor|template)(/.+|)$ /$1$2 last;


注意:
[^/]
匹配任何字符,但
/

尝试
^.+(((?:vendor | css | img | includes | js | template)\/.+)?$
我尝试了Richard的解决方案,解决了我的问题。。。所以我没有测试你的。。。无论如何,谢谢你,第一个和第二个解决方案都有效。我没有试过第三个,因为我相信它也会起作用。我也完全理解你在那里所做的一切,所以似乎有一些关于regex的事情我还不知道。。。谢谢!!