为什么 IE 从 HTTP 重定向到 HTTPS 时会重复查询参数

Why does IE duplicate query parameters when redirecting from HTTP to HTTPS

我们在 IIS 上托管一个站点,我们需要 HTTPS 请求,并且我 运行 发现了一个与 Internet Explorer (IE) 如何处理 URL 重定向有关的奇怪错误。

如果初始请求是

http://my.domain.com/?param1=hello&param2=100

然后 IIS 强制将请求重定向到 HTTPS 请求,但生成的请求是

https://my.domain.com/?param1=hello&param2=100&param1=hello&param2=100

在其他现代浏览器中,情况并非如此,请求会按预期重定向。

我们正在使用 URL Rewrite 将请求重定向到 HTTPS

有没有其他人以前见过这个问题,有什么办法可以解决这个问题吗?

在意识到重定向发生在 IIS 中后,我查看了重写操作中的设置并注意到复选框 Append query string 已被选中。取消选中该框后,问题似乎已解决。查询字符串仍然存在于重定向中,但它们现在不会在 IE 中重复。

也可以在 web.config 的 xml 中更改设置,方法是将 appendQueryString = "false" 添加到 <action> 子项。

在进行更改之前的 web.config 文件中,没有明确指定 appendQueryString 的状态,因此需要注意的是,重定向操作的默认行为似乎是附加查询字符串。

要更改 IIS 中的设置:

  1. 打开 IIS 管理器。
  2. Select [有问题的网站].
  3. 在功能视图中,单击 "URL Rewrite"。
  4. Select"HTTP/S to HTTP Redirect"规则点击右边"Inbound Rules > Edit"
  5. 向下滚动到接近编辑器窗格底部的 "Action > Append Query String" 复选框并取消选中它。
  6. 点击右边的"Apply"。

(Pretty pictures of most of this procedure here)