Как получить request_uri без аргументов на Nginx

Уже есть похожий вопрос, но мне нужен совет, как поставить обе необходимые части вместе:

Мне нужна следующая конструкция:

location ~*     {
if ($args ~ *)      {
add_header Link "<$scheme://$http_host$request_uri>; rel=\"canonical\"";
}
}

где $request_uri должен быть незакодированным URL (нельзя использовать $uri). Как это способ избавиться от args:

map $request_uri $request_uri_path {
  "~^(?P<path>[^?]*)(\?.*)?$"  $path;
}

попасть в мой пример?


person Evgeniy    schedule 08.08.2017    source источник
comment
Можете ли вы использовать $request_uri в операторе if вместо $args и захватить нужную часть при тестировании хвоста?   -  person Richard Smith    schedule 08.08.2017


Ответы (2)


Я не нашел подходящего регулярного выражения, поэтому придумал это:

^(?P<path>.*?)(\?.*)*$

Вы можете использовать в своих картах

map $request_uri $request_uri_no_parameters {
  "~^(?P<path>.*?)(\?.*)*$"  $path;
}

Вот мои тесты - https://regex101.com/r/K49bFm/2

person Alexei Martchenko    schedule 13.06.2020

Для тех, кому это понадобится позже: весь контекст выглядит так:

http {
        map $request_uri $request_uri_path {
        "~^(?P<path>[^?]*)(\?.*)?$" $path;
        }

        server {

                location ~* {
                if ($args ~ .) {
                add_header Link "<$scheme://$http_host$request_uri_path>; rel="canonical"";
                               }
                            }

              } 

     }
person Evgeniy    schedule 09.08.2017