使用 IIS 7.5 进行 HTTP 重定向

使用 IIS 7.5 进行 HTTP 重定向

我有两个内部网 ASP.NET MVC Web 应用程序托管在一个网站中,可以通过以下路径访问:localserver/oldlocalserver/new。我已将逻辑从第一个应用程序移至第二个应用程序,并希望所有对的请求都localserver/old/exactpath?querystring被重定向到localserver/new/exactpath?querystring

我尝试过的:

首先我尝试使用URL 重写,正如在ISS.net论坛。

<rule name="DomainRedirect">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^old$">
    </conditions>
    <action type="Redirect" url="/new/{R:1}" />
</rule>

我尝试在“默认网站”级别(两个网络应用程序都托管在那里)和网络服务器的顶层设置此规则,但没有成功。

这会导致无限重定向循环。如果它很重要,旧的 Web 应用程序有OldController,因此用户请求的完整路径如下所示localserver/old/old/actionname?queryparams

现在的运作方式:

我已经在 IIS 中安装并设置了标准 HTTP 重定向模块,但它要求我将旧的 Web 应用程序保留在服务器上。

我想要的是:

完全删除旧的 Web 应用程序,并在 IIS 服务器的更高级别上将重定向规则设置为新应用程序。这可以通过某种方式实现吗?如果可以,我应该在哪里放置规则以及它应该是什么样子。

答案1

将重定向规则添加到新站点,并将绑定从旧站点移动到新站点(多个绑定)。

答案2

由于没有得到满意的答案,我把这个问题放在一边,继续使用HTTP重定向。但后来我又给了URL重写一次机会,终于成功了正如我所料。

在 IIS 顶层(Web 服务器层),我们只需为 URL 重写模块设置一个非常简单的规则。可以使用 IIS 管理单元或在配置文件中的部分手动完成%windir%\System32\inetsrv\config\applicationHost.config<webserver>
看起来像这样。

<rewrite>
    <globalRules>
        <rule name="redicttonew" enabled="true">
            <match url="^oldapp/registration/register" />
            <action type="Rewrite" url="newapp/registration/register" />
        </rule>
    </globalRules>
</rewrite>

通过使用 URL 重写而不是 HTTP 重定向,我实现了:

  1. 彻底删除旧网站
  2. URL 重写可以配置为使用 301 代码响应或“静默”工作
  3. 当然,用户浏览器地址栏中的旧 URL 会更改为新 URL

希望我最初的问题和这个答案都很清楚。

相关内容