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

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

这几乎可以工作:

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

但是,问题是我只需要添加'&locale = de-de', 只要它不在那里如果有'?' 在url…

我可以帮助制定正确的正则expression式来做到这一点?

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

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

想法?

编辑:似乎这个行为存在与proxy_pass结合使用。 在一个简单的重写它真的很好。

  1. rewrite你只匹配URL的path部分。 这意味着, $1将不包含查询string。
  2. 默认情况下,Nginx将原始查询string附加到重写replace。

所以,编写应该是安全的

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

如果你不希望Nginx追加原始查询string,只需指定? 在replaceURL的末尾:

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

rewrite的匹配不包括查询参数,所以你需要在其他地方testing。

尝试:

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

rewrite不会修改请求参数,只会修改URI的path部分。 根据我的经验,搞乱重写会导致怪异的循环,新的参数被附加到无限循环中。 重写可能不是在Nginx中这样做的方法。

相反,你应该使用set指令修改$argsvariables:

 set $args $args&locale=de-de;