IIS 301 从一个控制器重定向到另一个控制器(包括参数)ASP.NET MVC

IIS 301 Redirect from one Controller to another (including parameters) ASP.NET MVC

我重命名了我的一个控制器,现在想对新的 URL 做一个 HTTP 301。我更喜欢从 IIS 执行此操作,这样我就不会污染我的 RouteConfig。我还想包括重定向中包含的任何参数。

我正在努力实现以下所有目标:

这是我目前拥有的,但我无法让它工作:

<rule name="Redirect Old to New" pattern="ECMAScript" stopProcessing="true">
    <match url=".*\/old.*" />
    <action type="Redirect" redirectType="Permanent" url="/new/{R:0}" />
</rule>

问题似乎与您的正则表达式有关。此上下文中的 URL 永远不会以 / 开头,您应该始终匹配字符串 ^ 的开头。此外,您需要定义要捕获的内容以提供重定向的结尾 URL.

<rule name="301 Redirect Old to New">
    <!--
      matches         /old
      matches         /old?foo=123
      matches         /old/?foo=123
      matches         /old/older/oldest?foo=123
      doesn't match   /oldee/whatever
    -->
    <match url="^old(?:/|(?=\?)|$)(.*)"/>
    <action type="Redirect" redirectType="Permanent" url="new/{R:1}"/>
</rule>

此外,出于 SEO 的目的,我会说您选择第二个选项是搬起石头砸自己的脚。您应该 总是 使用尾部斜杠或 从不 在您的重定向中使用斜杠。选择一个然后保持一致,这样您所有的着陆点 URL 都是相同的。

虽然使用 IIS 进行 301 重定向本身没有任何问题,但如果采用这种方法,您应该确保自己足够熟练地创建正则表达式。如果您有一个正则表达式测试器实用程序,它也会有所帮助,以确保您正在编写的内容按照您期望的方式工作。

这里有学习正则表达式的好教程:http://www.regular-expressions.info/tutorial.html