我有两个内部网 ASP.NET MVC Web 应用程序托管在一个网站中,可以通过以下路径访问:localserver/old
和localserver/new
。我已将逻辑从第一个应用程序移至第二个应用程序,并希望所有对的请求都localserver/old/exactpath?querystring
被重定向到localserver/new/exactpath?querystring
。
我尝试过的:
<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 重定向,我实现了:
- 彻底删除旧网站
- URL 重写可以配置为使用 301 代码响应或“静默”工作
- 当然,用户浏览器地址栏中的旧 URL 会更改为新 URL
希望我最初的问题和这个答案都很清楚。