Регекс nginx розташування з фігурними дужками та лапками не працює


1

У мене є сайт, працює на nginx. Мені потрібно переписати такі URL-адреси:

domain.com/blabla/88-aaa-aaaaa-aaaa/qqqq-qqq11-2qq-qqq.html

до цього

domain.com/blabla/aaa-aaaaa-aaaa/qqqq-qqq11-2qq-qqq

це означає - видаліть номер після косої риски, після чого тире, а потім розширення ".html".

Щоб досягти цього, я намагався використовувати

location ~* \/[0-9]{1,4}(-.*)(\.html)$ {
   ......
}

але в тестері локації він повністю ігнорує тире та збіги .../88aaa..., чого я хочу уникати. Потім я прочитав, що якщо вираз містить фігурні дужки, навколо виразу необхідно використовувати одинарні або подвійні лапки. Тому я спробував це

location ~* "\/[0-9]{1,4}(-.*)(\.html)$" {
   ......
}

Досі не пощастить ... З цитатами вона не відповідає розташуванню в обох випадках. Може хтось, будь ласка, допоможе?


Я не знаю nginx, але я знаю трохи про регулярні вирази. Ви впевнені, що вам потрібен зворотний нахил перед тире? Зазвичай тире не особливе, окрім внутрішніх дужок.
Скотт

1
@Scott добре, не дуже :) Я думав, що мені доведеться уникати цього. Просто спробував у тестері регулярних випробувань і перевірив, що він не потрібен. Дякую за підказку
j.kaspar

/не потрібно уникати. Спробуйте:location ~* /[0-9]{1,4}(-.*\.html)$ {
Toto

@До спасибі. Мені потрібно зрівняти номери лише негайно після косої риси, тому я його відмітив. У всякому разі, я спробував вашу пропозицію, але поведінка, на жаль, залишається такою ж
j.kaspar

1
nginxне буде перезапущено у вашій першій спробі (без лапок) - вона все одно буде виконувати попередню конфігурацію. Друга спроба (з котируваннями, з фальшивою зворотною косою рискою або без неї) працює для мене. Що відбувається всередині locationблоку?
Річард Сміт

Відповіді:


0

Я вирішив нарешті для цієї конкретної проблеми з розташуванням, що містить фігурні дужки, щоб уникнути їх та повторити блок розташування для кожної можливої ​​комбінації. Це означає

location ~* /[0-9](-.*)(\.html)$ {

для ... / 8 -.... html

location ~* /[0-9][0-9](-.*)(\.html)$ {

для ... / 88 -.... html

location ~* /[0-9][0-9][0-9](-.*)(\.html)$ {

для ... / 888 -.... html тощо.


0

Ви можете спростити його, +що означає "принаймні одне із цього"

location ~* /[0-9]+(-.*)(\.html)$ {

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.