我正在尝试调试我认为的 IIS 重写问题。
我在一台 IIS 服务器上托管多个网站,该服务器在后台充当 Kestrel 主机的代理。一切都运行正常,我没有遇到任何问题。
我遇到的问题是,当我的任何网站return Redirect("http://www.someotherurl.com/")
通过 ASP.NET MVC 执行操作时,基本 URL 总是被重写为我的网站的 URL - 即使该 URL 完全位于我的 URL 之外,情况也是如此。
如果我单独运行该站点,而不是在 IIS 代理内运行,则重定向将按我预期的方式工作,因此我知道这是 IIS 内的事情。
至于规则,我现在根本没有出站规则。对于入站规则,我有(针对我的每个网站):
- HTTP 到 HTTPS 重定向规则。
- 重写规则,获取 URL 并将 URL 重写为http://127.0.0.1:端口以便自托管服务能够适当地处理请求。每个站点都有单独的规则。
我现在非常困惑,因为我看不出有任何其他方法可以让重定向不转到我提供的实际 URL,但 IIS 似乎在做一些神秘的事情。
更多信息
- 请求来自 www.example.net/Documents。
- 规则根据传入的 URL 将 URL 重写为 127.0.0.1:port/Documents。
- 端点处理请求。
- 已发送重定向响应。
- 无论如何,基本 URL 都会转换回 www.example.com - 即使重定向到不同的域。我相信这就是问题所在。似乎 IIS 默认这样做。但我不确定。
答案1
找到了答案并想在这里发布以防其他人遇到这个问题。
每https://stackoverflow.com/a/23600821/132528:
是否涉及应用程序请求路由?查看 IIS -> 计算机或站点 -> 应用程序请求路由缓存 -> 服务器代理设置,然后取消选中“在响应标头中反向重写主机”复选框。如果您在计算机级别执行此操作,它将对所有站点生效。如果您在特定站点上执行此操作,它将仅对该站点生效,而框上的其他站点将不受影响。