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

Posted

技术标签:

【中文标题】Nginx在重定向时复制查询字符串【英文标题】:Nginx duplicating query string on redirect 【发布时间】:2016-07-12 06:47:32 【问题描述】:

我正在尝试重定向来自包含“www.”的网址的所有流量。到不包含它的类似 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”部分之后的重定向结束,因为我读过的内容应该可以工作,但没有。

【问题讨论】:

【参考方案1】:

您的配置无效。您似乎混淆了returnrewrite 的语法。详情请见this document。

$request_uri 变量已经包含查询字符串,所以这应该与 return 一起使用:

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

rewrite 指令将附加查询字符串,除非附加了 ?。可以使用rewrite 指令来完成相同的功能,但在这种情况下,它会是矫枉过正。

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

【讨论】:

谢谢,我认为这是我的浏览器缓存不正确的重定向和您所说的内容的奇怪组合。我很感激。

以上是关于Nginx在重定向时复制查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 重定向附加查询字符串?

使用 Azure AD 在两者之间登录时,如何将查询字符串参数或 POST 数据传递到重定向站点?

laravel 4.2在重定向时重新生成会话

为啥 perror() 在重定向时会改变流的方向?

Auth::user 不会在重定向时保留

Chrome 在重定向时取消 CORS XHR