2016-12-20 9 views
2

Я пытаюсь соответствовать следующему маршруту:Regex для Nginx маршрут сопоставления

/{anything1}/{anything2}/file.{jpg|png}

где anything1 может быть [a-z0-9] (строчные буквы и цифры) и anything2 могут быть [-a-z0-9] (строчные буквы, цифры и а тир).

Причина, почему я не хочу, чтобы соответствовать всем файлам следующим образом:

location ~* (.+)\.(jpg|png)$

что мне нужно $anything1 и $anything2 переменных, доступной в location блоке, так что я могу сделать рерайт позже ,

Заранее спасибо.

+1

Что вы хотите сказать? –

+0

Вы просто перечисляете факты, нет вопросов отвечать. –

+1

вопрос: «Как создать регулярное выражение для соответствия'/{anything1}/{anything2}/file. {Jpg | png} 'route" – Pono

ответ

1

Вы можете использовать регулярное выражение как

^/[^/]+/[^/]+/[^/]+\.(?:jpg|png)$ 

Посмотреть regex demo

The [^/]+ матчи 1+ другие символы, чем /, и, таким образом, не может перелива через / разделителей и гарантирует Вам только соответствовать пути с определенным количество подпапок.

Точка должна быть экранирована, поэтому используется \..

(?:jpg|png) является Чередование группы, что соответствует 2 последовательностей, либо jpg или png.

Если вы действительно хотите, чтобы только определенные символы (а белый список подход), вам нужно будет использовать кванторы (я думаю, что вам нужно +, один или несколько вхождений) с классами персонажей для ничего детали:

^/[a-z0-9]+/[a-z0-9-]+/[^/]*\.(?:png|jpg)$ 
Смежные вопросы