nginx 重写指令的替换 URI 中尾随问号 (?) 的影响

nginx 重写指令的替换 URI 中尾随问号 (?) 的影响

我试图理解rewrite ^/search/(.*)$ /search.php?q=$1和之间的区别rewrite ^/search/(.*)$ /search.php?q=$1?。区别在于?替换 URI 中的尾随。

如果请求 URI 是,/search/apple?opt=123那么 URI 会如何以不同的方式重写?

我猜是这样rewrite ^/search/(.*)$ /search.php?q=$1的,但我不知道。/search.php?q=apple&opt=123rewrite ^/search/(.*)$ /search.php?q=$1?/search.php?q=apple

答案1

按照https://nginx.org/r/rewrite.

如果替换字符串包含新的请求参数,则先前的请求参数将附加在其后。如果不希望出现这种情况,请在替换字符串末尾放置一个问号,以避免附加这些参数

这是测试此场景的最少代码……

# configuration file /etc/nginx/nginx.conf:
events {}

http {
    server {
        rewrite ^/search/(.*)$ /search.php?q=$1 permanent;
        # rewrite ^/search/(.*)$ /search.php?q=$1? permanent;
    }
}

永久标志仅用于测试。我们可以将上述代码保存为nginx.conf并启动 Nginx。curl上述代码的输出确认/search/apple?opt=123将重定向到/search.php?q=apple&opt=123

同样,对于第二个重写条件......

# configuration file /etc/nginx/nginx.conf:
events {}

http {
    server {
        # rewrite ^/search/(.*)$ /search.php?q=$1 permanent;
        rewrite ^/search/(.*)$ /search.php?q=$1? permanent;
    }
}

curl上述代码的输出确认/search/apple?opt=123将重定向到/search.php?q=apple

所以,

如果请求 URI 是 /search/apple?opt=123,那么 URI 会如何以不同的方式重写?

我猜测重写 ^/search/(。)$ /search.php?q=$1 它将是 /search.php?q=apple&opt=123 并且重写为 ^/search/(.)$ /search.php?q=$1? 它会是 /search.php?q=apple? 但我不确定。

你是对的,这是预期的结果。

相关内容