我需要配置我的反向代理,以便在 URL 末尾添加以下参数:&locale=de-de
这几乎可行:
rewrite ^(.*)$ $1&locale=de-de break;
然而,问题是我需要附加'&locale = de-de'只有当它还不存在时和如果网址中有“?”...
我可以得到一些帮助来制定正确的正则表达式来做到这一点吗?
另一个问题:如果我使用这个,为什么我的 url 中的问号不显示:
$uri?$args
或者 $uri$is_args$args 转换未编码的 url,问号显示为 %3f。
有想法吗?
编辑:似乎与 proxy_pass 结合使用时存在此行为。在简单的重写中,它确实运行良好。
答案1
- 在
rewrite
你匹配 URL 时小路部分。这意味着,$1
将不包含查询字符串。 - 默认情况下,Nginx 将原始查询字符串附加到重写替换。
因此,可以安全地编写
rewrite ^(.*)$ $1?locale=de-de break;
如果您不希望 Nginx 附加原始查询字符串,只需?
在替换 URL 末尾指定:
rewrite ^(.*)$ $1?locale=de-de? break;
答案2
匹配rewrite
不包含查询参数,因此您需要在其他地方进行测试。
尝试:
if ($args !~* locale=de\-de){
rewrite ^(.*)$ $1&locale=de-de last;
}
答案3
不会rewrite
修改请求参数,只会修改 URI 的路径部分。根据我的经验,重写会导致奇怪的循环,新参数会无限地附加。在 Nginx 中,重写可能不是实现此目的的方法。
相反,您应该$args
使用set
指令修改变量:
set $args $args&locale=de-de;