rewrite ^/search$/search?foo=bar redirect;
看似简单的逻辑,但会导致无限循环,因为Nginx会分别获取参数,因此$不再起作用. / search?foo = bar一次又一次触发它,因为它愚蠢地匹配.
因此,有没有不触及$args的有效解决方案?
(我想使用正则表达式,因为匹配规则更加复杂,但基本上是我想要的)
最佳答案
根据the nginx wiki,“重写只能在路径上进行,而不能在参数上进行.”
原文链接:https://www.f2er.com/nginx/532386.html因此,也许关键是仅在找不到参数的情况下才重写.
if ($args !~ "(^|&)foo=") {
rewrite ^/search$/search?foo=bar redirect;
}