Nginx переписывает частичный URL

У меня есть следующий URL-адрес:

http://www.example.com/img/products/10103/f/10103-s-1.jpg

И хотел бы переписать его на:

http://www.example.com/img/products/10103/10103-s-1.jpg

Цифры между ними (10 103) могут меняться, как и имена изображений. Я пробовал следующее правило перезаписи nginx:

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

Почему это работает сейчас?


person ddillert    schedule 13.06.2014    source источник
comment
Я не знаком с nginx, но мне кажется, что это регулярное выражение, а $ указывает на конец строки. Что произойдет, если вы удалите знак $ из выражения поиска?   -  person Philipp Gayret    schedule 13.06.2014
comment
Я считаю, что вы правы. Кроме того, я считаю, что последний бит был отрезан после перезаписи. Теперь я изменил его на это, и он работает: перепишите ^/img/products/(.*)/f/(.*)$ /img/products/$1/$2 последним;   -  person ddillert    schedule 13.06.2014


Ответы (1)


Текущее правило перезаписи соответствует

^/img/products/(.+)$/f

Это означает, что путь URL-адреса начинается с /img/products/, затем следует что-либо, URL-адрес заканчивается, а затем следует /f. Это никогда не может соответствовать одной строке, поскольку вы используете знак доллара, который указывает конец строки, а затем символы после него.

Если вы хотите соответствовать

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

Вам придется изменить его на ^/img/products/(.+)$, но поскольку вы хотите извлечь две группы идентификаторов, которые вы ищете, ^/img/products/(.+)/f/(.+)$, замените их на /img/products/$1/$2. Как вы написали в комментарии.

person Philipp Gayret    schedule 13.06.2014