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

Nginx proxy_pass исключает URL-адрес с регулярным выражением

Я пытаюсь прокси передать местоположение, исключая только случай с регулярным выражением.

У меня есть этот URL /autocomplete/<var1>/<var2> и я хочу, чтобы прокси прошел, только если var1 отличается от a, так b/foo, c/foo ecc будет проксироваться.

В apache я использовал это:

ProxyPassMatch ^/autocomplete/a/(.*)$ !
ProxyPass /autocomplete/ http://localhost:1234/autocomplete/

В NGINX я пробовал вот что:

location ~ /autocomplete/(?<var1>.*)/(?<var2>.*) {
    if ($var1 != "a") {
        proxy_pass http://127.0.0.1:1234/autocomplete/$var1/$var2;
   }
}

Он работает для других значений var1, но для a он возвращает 404.

Решено с помощью:

location ~ ^/autocomplete/(?!(a)) {
    proxy_pass http://localhost:1234;
}