2015-10-05 4 views
0

У меня есть маршрут с URL-адресами, которые могут иметь дополнительное поле. Это может быть либо в форме:nginx regex - соответствие переменному числу полей

  • "/my-route/azezaezaeazeaze.123x456.jpg"
  • "/my-route/azezaezaeazeaze.123x456.6786786786.jpg"

с :

  • "azezaezaeazeaze" будучи Mongoid
  • 123x456 два целых числа, разделенных "х"
  • 6786786786 a unix timestamp
  • jpg расширение изображения (может быть jpeg, png, gif ...)
  • все они разделены знаком «.».

Я хотел бы удалить дополнительную деталь (временную метку) из запроса с помощью модуля http rewrite. Так что второй url фактически становится лживым первым.

Я сделал небольшой тест на regex101, чтобы получить группы, но: - это не кажется, правильный синтаксис для Nginx - Я не вижу, как это позволит мне удалить Отметка времени

Как удалить метку времени из этого URL-адреса?

ответ

1

Начиная с правого конца, вы должны соответствовать точка, за которой следует что-либо кроме точки, поэтому мы имеем (\.[^.]*)$, затем движется влево, мы хотим в соответствии с точкой, за которой следует только цифры \.[0-9]*, который мы не хотим, чтобы захватить, а затем слева от этого мы хотим все. я закончил с чем-то вроде этого:

rewrite ^(.*)\.[0-9]*(\.[^.]*)$ $1$2 ; 
+0

Таким образом, он соответствует URL-адресу, но он не переписывает его правильно. Я пытаюсь выяснить, в чем проблема. – nha

+1

Извините, '\ 1 \ 2' был синтаксисом для подстановки в вашем примере regex101. Это должно быть '$ 1 $ 2' для nginx. Что касается флагов, это зависит от остальной части вашей установки. – meuh

+0

Ах, вы правы, кажется, я принял ваш ответ. Скажете ли вы, что ваше регулярное выражение более эффективно, чем мое (поскольку оно кажется более строгим с цифрами)? – nha

0

спекулируя на мою первую попытку и @meuh ответа, я закончил со следующим:

rewrite ^(/.*\..*)(\..*)(\..*)$ $1$3 last; 

Сейчас он работает, но я хотел бы приветствовать любой комментарий относительно стиля/эффективности этого переписывания.

Смежные вопросы