nginx 重写在 url 末尾附加一个参数

Sas*_*cha 13 nginx regex

我需要配置我的反向代理,以便在 url 的末尾添加以下参数: &locale=de-de

这几乎有效:

rewrite ^(.*)$ $1&locale=de-de break;

但是,问题是我需要附加 '&locale=de-de'仅当它不存在并且有 '?'时才需要附加在网址中...

我可以在制定正确的正则表达式方面获得一些帮助吗?

另一个问题:如果我使用这个,为什么我的 url 中的问号不显示:
$uri?$args

或者 $uri$is_args$args 翻译未编码的 url,问号显示为 %3f。

想法?

编辑:与proxy_pass 结合使用时,似乎存在此行为。在简单的重写中,它工作得非常好。

Ale*_*rov 19

  1. rewrite您只匹配 URL 的路径部分。这意味着,$1将不包含查询字符串。
  2. 默认情况下,Nginx 将原始查询字符串附加到重写替换。

所以,写应该是安全的

rewrite ^(.*)$ $1?locale=de-de break;
Run Code Online (Sandbox Code Playgroud)

如果您不希望 Nginx 附加原始查询字符串,只需?在替换 URL 的末尾指定:

rewrite ^(.*)$ $1?locale=de-de? break;
Run Code Online (Sandbox Code Playgroud)


Sha*_*den 3

的匹配rewrite不包括查询参数,因此您需要在其他地方进行测试。

尝试:

if ($args !~* locale=de\-de){
    rewrite ^(.*)$ $1&locale=de-de last;
}
Run Code Online (Sandbox Code Playgroud)