对于路径/{any string with one or more char}/foo
,我需要覆盖参数id
。它可能在那里,可能没有。我想保留其他参数。
示例:
/a/foo
-> /a/foo?id=$id
/bar/foo?id=99
-> /bar/foo?id=$id
/123/foo?id
-> /123/foo?id=$id
/bar/foo?id=99&id2=100
-> /bar/foo?id=$id&id2=100
我尝试过的事情:
location ~* ^/.+/foo/*$ {
if ($args ~ (.*)(id.*)(.*)) {
return 302 $uri?$1$3;
}
set $url $uri?${args}&id=$id;
return 302 $url;
}
但是,该参数没有被替换。
答案 0 :(得分:0)
您的if
块将无法正确提取前导参数和尾随参数,因为您需要标识&
分隔符。
尝试:
location ~* ^/.+/foo/?$ {
if ($args ~ ^(.*&)?id[^&]*(&.*)?$) {
return 302 $uri?$1id=$id$2;
}
return 302 $uri?id=$id$args;
}