Nginx 在重定向时复制查询字符串
Nginx duplicating query string on redirect
我正在尝试将所有流量从包含 'www.' 的 url 重定向到不包含它的类似 url,但是当我这样做时,Nginx 附加了一个重复的查询url.
末尾的字符串
例如用户输入:
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' 部分后重定向的末尾,因为我读过的内容应该有效,但没有。
您的配置无效。您似乎混淆了 return
和 rewrite
的语法。有关详细信息,请参阅 this document。
$request_uri
变量已经包含查询字符串,所以这应该与 return
:
一起使用
return 301 $scheme://example.com$request_uri;
除非附加 ?
,否则 rewrite
指令将附加查询字符串。可以使用 rewrite
指令来完成相同的功能,但在这种情况下就有点过头了。
由于您的配置无效,nginx
仍然是 运行 较早的配置,可能是较早的实验将 $request_uri
置于 rewrite
指令中,因此双重查询字符串。
我正在尝试将所有流量从包含 'www.' 的 url 重定向到不包含它的类似 url,但是当我这样做时,Nginx 附加了一个重复的查询url.
末尾的字符串例如用户输入:
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' 部分后重定向的末尾,因为我读过的内容应该有效,但没有。
您的配置无效。您似乎混淆了 return
和 rewrite
的语法。有关详细信息,请参阅 this document。
$request_uri
变量已经包含查询字符串,所以这应该与 return
:
return 301 $scheme://example.com$request_uri;
除非附加 ?
,否则 rewrite
指令将附加查询字符串。可以使用 rewrite
指令来完成相同的功能,但在这种情况下就有点过头了。
由于您的配置无效,nginx
仍然是 运行 较早的配置,可能是较早的实验将 $request_uri
置于 rewrite
指令中,因此双重查询字符串。