Nginx:如果不存在则添加 GET 参数

Nginx : add GET parameter if not present

我正在使用 Nginx(除其他外)在我的本地机器上充当 Subsonic 的代理(即 Nginx 有一个 proxy_pass 设置来重定向所有指向 [=11 的流量=] 朝向 localhost:4040).

在没有任何 GET 参数的情况下访问主视图时 (/home.view),Subsonic 显示随机页面,其中包含来自我的图书馆的随机专辑。通过单击 link 到 /home.view?listType=newest) 可以访问最近添加的页面,但我希望它是默认设置,而不会弄乱 Subsonic 的代码,因为这会在更新 Subsonic 时中断。

使用简单的 rewrite 似乎不是解决方案,因为重写只考虑 URI,没有 GET 参数。因此,将 ^/home.view$ 重写为 /home.view?listType=newest 将始终显示最近添加的页面,即使我请求其他页面也是如此。

我想仅在 listType 参数不存在于请求中时添加它,或者以这样的方式添加它,即如果它存在,它会被请求中的值覆盖。有没有办法在 Nginx 中做到这一点?

非常感谢!

location /home.view {
    if ( $arg_listType = '') {
        rewrite ^ /home.view?listType=newest last;
    }
    proxy_pass ....
    ....
}

我用类似this question的方法解决了它,即设置一个变量为0,如果参数存在则将其设置为1,最后如果变量仍然为0则重写。