Nginx在重定向上复制查询字符串

时间:2016-03-24 15:40:46

标签: linux redirect nginx server webserver

我正在尝试重定向来自包含“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'部分之后的重定向结束,因为我所读取的内容应该有效,但事实并非如此。

1 个答案:

答案 0 :(得分:2)

您的配置无效。您似乎混淆了returnrewrite的语法。有关详细信息,请参阅this document

$request_uri变量已包含查询字符串,因此这适用于return

return 301 $scheme://example.com$request_uri;

除非附加rewrite,否则?指令将附加查询字符串。可以使用rewrite指令来完成相同的功能,但在这种情况下它会有点过分。

由于您的配置无效,nginx仍然使用早期配置运行,可能是早期的实验,$request_uri指令放置rewrite,因此是双查询字符串。