如何在 nginx 中明确将百分比转义应用于 URL?

如何在 nginx 中明确将百分比转义应用于 URL?

我有以下配置:

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。我该怎么做?

答案1

尝试使用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;
}

答案2

您可以使用 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;
}

相关内容