我正在尝试重定向来自包含“www”的网址的所有流量。对于不包含它的类似网址,但是当我这样做时,Nginx会在网址的末尾附加一个重复的查询字符串。
例如,用户输入:
www.website.com/test/?_id=12345
他们被重定向到:
website.com/test/?_id=12345?_id=12345
这是我的配置:
server {
server_name www.website.com;
return 301 $scheme://website$request_uri permanent;
}
server {
server_name website.com
# actual server stuff
}
我试过追加'?'到'request_uri'部分之后的重定向结束,因为我所读取的内容应该有效,但事实并非如此。
答案 0 :(得分:2)
您的配置无效。您似乎混淆了return
和rewrite
的语法。有关详细信息,请参阅this document。
$request_uri
变量已包含查询字符串,因此这适用于return
:
return 301 $scheme://example.com$request_uri;
除非附加rewrite
,否则?
指令将附加查询字符串。可以使用rewrite
指令来完成相同的功能,但在这种情况下它会有点过分。
由于您的配置无效,nginx
仍然使用早期配置运行,可能是早期的实验,$request_uri
指令放置rewrite
,因此是双查询字符串。