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)$" {
   ......
}

Все еще не повезло ... С кавычками это не соответствует местоположению в обоих случаях. Может ли кто-нибудь помочь, пожалуйста?

2 ответа2

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)$ {

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .