【问题标题】:IIS 301 Redirect from one Controller to another (including parameters) ASP.NET MVCIIS 301 从一个控制器重定向到另一个(包括参数)ASP.NET MVC
【发布时间】:2016-03-27 13:08:00
【问题描述】:

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

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

  • site.com/old --> 301 site.com/new
  • site.com/old/ --> 301 site.com/new/
  • site.com/old?foo=bar --> 301 site.com/new?foo=bar

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

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

【问题讨论】:

    标签: asp.net-mvc redirect iis web-config


    【解决方案1】:

    问题似乎与您的 RegEx 有关。此上下文中的 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 的目的,我会说您使用第二种选择是在自取其辱。您应该始终使用尾部斜杠或从不在重定向中使用斜杠。选择一个,然后保持一致,这样您的所有着陆网址都相同。

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

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

    【讨论】:

    • @globetrotter - 我再次更新了正则表达式 - 以前与 /old 不匹配。
    • 嗨,感谢您的精彩回答。我所有的 URL 末尾都有一个斜杠(/old/ , /new/ 等),我已经在 MVC 中以这种方式配置了它。我应该如何更改规则以避免糟糕的 SEO?
    • 我指定的方式总是会添加一个斜杠,所以它应该适合你。要使其使用尾部斜杠,您必须将匹配正则表达式更改为^old(?:(?=\/)|(?=\?)|$)(/?.*),并将重定向正则表达式更改为new{R:1}(可能对您没有帮助,但其他人可能想知道) .
    • @NightOwl888 你能帮我解决这个重定向问题吗? stackoverflow.com/questions/47614062/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    相关资源
    最近更新 更多