【问题标题】:Redirect Response always redirects to the same domain重定向响应总是重定向到同一个域
【发布时间】:2019-05-17 16:44:33
【问题描述】:

我正在编写一套 ASP.NET Core Web 应用程序,这些应用程序有时必须相互重定向。在本地测试时,一切正常。但是,当我在我们的登台服务器上发布它们时,重定向总是“停留”在同一个主机上。例如,如果我在http://app1.test/ 上并重定向到http://app2.test/somepath,我实际上在Location HTTP 标头i http://app1.test/somepath 中得到了什么:我指定的任何URL 都会被转换,以便它“保留”在当前主机名中.

但是,这不会在本地发生。我已将应用程序部署为 Kestrel 进程,并且它们通过 IIS 公开,用作反向代理。这可能是原因吗?我应该怎么做才能解决这个问题?

更新

这是app1.test的反向代理的完整web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:5000/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
    <system.web>
        <sessionState mode="InProc" />
        <customErrors mode="RemoteOnly" />
    </system.web>
</configuration>

app2.test 的 web.config 几乎是相同的(当然,除了端口号)。

更新 2

我会尽力解释得更好。我注意到目标站点并不重要,所以我会让事情变得更简单:我的应用程序中有一个操作,我想将用户重定向到 Google。这是Home 控制器中的操作:

public IActionResult ToGoogle()
{
    return Redirect("https://www.google.com?q=Hi");
}

如果我在本地启动网络应用程序并请求 http://localhost:1234/Home/ToGoogle,一切都很好:响应是 302 Found,Location 标头中有正确的 URL(www.google.com 等)。

一旦我将应用程序发布到临时服务器(端口 5000 上的 Kestrel 应用程序,在具有上面发布的重写规则的 IIS 反向代理后面),就会发生以下情况:

这是什么原因?

【问题讨论】:

  • 听起来像是反向代理。您的配置文件中有任何 规则吗?你可以阅读更多关于它here
  • @AmanB 我是这么认为的,但我不确定我做错了什么。我发布了我的应用的 web.config。
  • 如果你想改变 URL .. 试试
  • @AmanB 不,这不是我想要的。甚至让访问者知道内部代理服务器是localhost:5000 也是没有意义的。相反,我需要将其重定向到 另一个 站点。
  • 很遗憾,我不太清楚你的问题

标签: asp.net-core


【解决方案1】:

我自己找到了解决方案。这确实是反向代理的问题。

IIS 具有在响应标头中重写主机的选项。该解决方案在this answer 中进行了描述(如果您的 IIS 或 Windows Server 版本不是指定的版本,则该问题的其他答案中有附录)。

【讨论】:

  • 男人!你拯救了我的一天:)
猜你喜欢
  • 2020-07-16
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
相关资源
最近更新 更多