Как заставить Nginx переписывать ленивый (не жадный) - PullRequest
0 голосов
/ 27 июня 2018

У меня есть переписать на Nginx, как это:

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

Следующий URL:

foo/bar/vendor/datetimepicker/css/datetimepicker.css

перенаправляется на

css/datetimepicker.css

вместо

vendor/datetimepicker/css/datetimepicker.css

Как я могу сделать так, чтобы он захватывал с самого начала, а не только последнюю часть?

Я выяснил, что решение может заключаться в том, чтобы сделать выражение нежадным, но все, что я пробовал, не удалось (добавлено?, Добавлено / U ... во всех разных позициях)

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Используйте директиву

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

Примечание: [^/] соответствует любому символу, кроме /

0 голосов
/ 27 июня 2018

Если вы знаете, что URI содержит только два начальных элемента пути, используйте класс символов, который исключает символ / (например, [^/]).

Например:

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

Но если у вас есть два или более ведущих элемента пути и вам нужно сделать их нежадными, используйте оператор +? вместо оператора +.

Например:

^/.+?/.+?/((?:css|img|includes|js|vendor|template)/.+)?$

Или даже смесь вышеперечисленного:

^/[^/]+/.+?/((?:css|img|includes|js|vendor|template)/.+)?$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...