Назад | Перейти на главную страницу

Как упростить правила регулярного выражения Nginx Mapping?

Я не знаю, разрешен этот вопрос или нет. Если нет, простите меня :)
Во всяком случае, у меня есть правило сопоставления для перенаправления nginx

/hotel/xyz/abc  /hotel/xyz/abc-nana;
/hotel/xyz/abc/  /hotel/xyz/abc-nana;
~^/hotel/xyz/abc\?(.*) /hotel/xyz/abc-nana?$1;

У меня вопрос, можно ли их объединить в одно правило? Я плохо знаю регулярное выражение

Я предполагаю xyz и abc означают любую буквенно-цифровую строку. Тогда вы ищете такое правило:

location ~ ^/hotel/([0-9a-z]+)/([0-9a-z]+)/?$ {
    rewrite ^ http://$host/hotel/$1/$2-nana$is_args$args permanent;
}

(0-9a-z]+) соответствует любой буквенно-цифровой строке, имеющей одно или несколько совпадений. Результаты сохраняются в $1 и $2 переменные. Последнее совпадение косой черты необязательно (? указывает 0 или 1 совпадение).

В nginx нельзя сопоставить аргументы запроса в location или rewrite заявления. Однако, если вы хотите добавить только возможные аргументы запроса без изменения перенаправления, тогда $is_args$args для этого достаточно.