You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

NGINX转发URL时将+转换为%20的问题求助

NGINX转发URL时将+转换为%20的问题求助

大家好,我配置了一段NGINX规则,用正则来转换URL,这部分逻辑本身是正常工作的。但现在遇到个问题:当转发请求到新的Atlassian实例时,原URL里的+符号会被转换成%20,虽然从应用层面来说这种转换有它的道理,但这并不是我期望的行为。

以下是我目前的NGINX配置代码:

user nginx;

worker_processes auto;

worker_rlimit_nofile 8192;

pid /run/nginx/nginx.pid;

events {
    worker_connections 4000;
}

error_log /var/log/nginx/error.log error;

http {
    server {
        listen 443  ssl default_server;
        server_name localhost;

        ssl_certificate /etc/nginx/certs/REDACTED.cert;
        ssl_certificate_key /etc/nginx/certs/REDACTED.key;

        location / {
            set $unencoded_args on;
            set $substitute_url '';

            if ($request_uri ~* "https:\/\/(confluence|public)\.REDACTED\.nl\/display\/(.*)\/(.*)") {
                set $unencoded_arg_substitute_url 'https://REDACTED.atlassian.net/wiki/pages/viewpage.action?spaceKey=$2&title=$3';
                rewrite ^ $unencoded_arg_substitute_url redirect;
            }

            if ($request_uri ~* "https:\/\/(confluence|public)\.REDACTED\.nl\/pages\/viewpage.action\?spaceKey=(.*)&title=(.*)") {
                set $unencoded_arg_substitute_url 'https://REDACTED.atlassian.net/wiki/pages/viewpage.action?spaceKey=$2&title=$3';
                set $substitute_url  $unencoded_arg_substitute_url;
                rewrite ^ $substitute_url permanent;
            }

            if ($request_uri ~* "https:\/\/confluence\.REDACTED\.nl\/pages\/viewpage.action\?pageId=(.*)") {
                set $unencoded_arg_substitute_url 'https://REDACTED.atlassian.net/l/cp/VjEHCLZv';
                rewrite ^ $unencoded_arg_substitute_url redirect;
                proxy_pass $unencoded_arg_substitute_url;
            }

            if ($substitute_url = '') {
                set $unencoded_arg_substitute_url 'https://REDACTED.atlassian.net/wiki';
                rewrite ^ $unencoded_arg_substitute_url redirect;
            }

            proxy_pass $unencoded_arg_substitute_url;
            proxy_set_header Host REDACTED.atlassian.net/wiki;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout http_500 http_502 http_503 http_504;

            root /var/www;
            index index.html;

            error_page 502 503 504 fallback.html;
            error_page 404  not_found.html;
            error_page 401 unauthorized.html;
        }
    }
}

麻烦各位帮忙看看,怎么调整配置才能避免+被转成%20呢?

备注:内容来源于stack exchange,提问作者Joeri_Damian

火山引擎 最新活动