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

Как явно применить процентные escape-последовательности к URL-адресу в nginx?

У меня такая конфигурация:

location ~ ^/((index\.php|robots\.txt|admin|static|uploads|api)(/.*)?)$ {
    proxy_set_header Host $http_host;
    proxy_pass http://localhost:1337/$1?$args;
}

Я хочу применить процент экранирования к $1, так например /admin/foo%20bar будет направлять как /admin/foo%20bar а не как /admin/foo bar. Как я могу это сделать?

Попробуй использовать nginx http_set_misc_module # set_unescape_uri

например:

location ~ ^/((index\.php|robots\.txt|admin|static|uploads|api)(/.*)?)$ {
    set_unescape_uri $1;

    proxy_set_header Host $http_host;
    proxy_pass http://localhost:1337/$1?$args;
}

Вы можете использовать директиву set, которая сохраняет кодировку без изменений, или вы можете сказать, что перекодирует декодированный uri.

location ~ ^/((index\.php|robots\.txt|admin|static|uploads|api)(/.*)?)$ {
    set $query $1;
    proxy_set_header Host $http_host;
    proxy_pass http://localhost:1337/$query?$args;
}