Nginx - 需要正则表达式将参数附加到url

时间:2011-09-17 06:01:55

标签: regex nginx

我一直坚持使用正则表达式。我想将foo=1附加到所有网址。

对于以下网址:

www.xyz.com/
Rewrite:
www.xyz.com/?foo=1

对于以下网址:

www.xyz.com/?abc=2
Rewrite:
www.xyz.com/?abc=2&foo=1

3 个答案:

答案 0 :(得分:3)

尝试将变量放在args之前,

location /whatever {
    try_files $uri /index.php?foo=1&$args;
}

这样,如果args为空,你将拥有foo,如果没有,它将被追加。 将$ args放在首位可能会使您的请求看起来像这样

www.xyz.com/?&foo=1

因为$args是第一个而且它们是空的,我不确定这是否会得到正确处理。

请注意,如果您明确定义foo,您输入的值将被nginx覆盖。

www.xyz.com/?foo=new_value&foo=1

foo=1会覆盖新值,如果您想保护该值,那么将$args放在最后会帮助您实现这一目标。

答案 1 :(得分:0)

下面的内容是您的第一个网址

([w]{3}\.[a-zA-Z0-9\-]+\.([a-zA-Z0-9]{3,4}|[a-zA-Z]{2}|[a-zA-Z0-9]{3,4}\.[a-zA-Z]{2}))/?

这是第二个网址

([w]{3}\.[a-zA-Z0-9\-]+\.([a-zA-Z0-9]{3,4}|[a-zA-Z]{2}|[a-zA-Z0-9]{3,4}\.[a-zA-Z]{2}))/?(\?\S*=\S*)

答案 2 :(得分:-1)

在Nginx中,rewrite实现,因为它仅在URI的路径部分上运行。相反,您必须修改$args变量:

set $args $args&foo=1