Nginx: местоположение перенаправления на основе нескольких аргументов - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть перенаправление местоположения nginx, настроенное для перенаправления /my_route на страницу, которая скоро появится, но разрешить /my_route?db=preview проходить через прокси-сервер.

location /my_route {
  if ($arg_db != "preview") {
    rewrite ^ /coming-soon/ last;
  }
  <other location config for when db == preview>
}

Я хочу добавить дополнительный уровень сложности, чтобы поддерживать несколько языков для будущей страницы.

Конфиг, который ломает nginx, но дает вам идею:

location /my_route {
  if ($arg_db != "preview") {
    if ($arg_lang == "es") {
      rewrite ^ /coming-soon/index_es.html last;
    }
    rewrite ^ /coming-soon/ last;
  }
  <other location config for when db == preview>
}

Я знаю, что if is evil , поэтому я счастлив отойти от используя if, если это то, что нужно, но я не знаю, в каком направлении смотреть. Я просто знаю, что nginx не поддерживает && операторы или вложенные if операторы.

1 Ответ

1 голос
/ 27 апреля 2020

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

Например:

map $arg_lang $mylang {
    default   /;
    es        /index_es.html;
}
server {
    ...
    rewrite ^ /coming_soon$mylang last;
    ...
}

Подробнее см. в этом документе .

...