我对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 ...
答案 0 :(得分:2)
如果您知道URI仅包含两个前导路径元素,请使用排除/
字符的字符类(例如[^/]
)。
例如:
^/[^/]+/[^/]+/((?:css|img|includes|js|vendor|template)/.+)?$
但是,如果您有两个或多个前导路径元素,并且需要使其不贪心,请使用+?
运算符代替+
运算符。
例如:
^/.+?/.+?/((?:css|img|includes|js|vendor|template)/.+)?$
甚至是上述各项的混合:
^/[^/]+/.+?/((?:css|img|includes|js|vendor|template)/.+)?$
答案 1 :(得分:0)
使用指令
rewrite ^/[^/]+/[^/]+/(css|img|includes|js|vendor|template)(/.+|)$ /$1$2 last;
注意:[^/]
匹配除/
以外的任何字符