【问题标题】:301 redirects and matching old maproutes to new ones301 重定向和匹配旧的 maproutes 到新的
【发布时间】:2013-06-10 06:04:37
【问题描述】:

我有 2 个网站,一个名为 www.old.com 的旧网站和一个名为 www.new.com 的新网站。旧 url 有一个 301 永久重定向到新网站,但是 新网站有不同的 maproute,所以一切都不匹配 旧网站有以下类型的路由

      routes.MapRoute(
          "myroutes",
       "{controller}/{action}/{id}/{mytitle}", 
  new { controller = "buyer", action = "detail",mytitle=UrlParameter.Optional} 

        );

      old.com/buyer/detail/id/mytitle

新网站有以下内容

routes.MapRoute(
          "myroutes",              
          "{mytitle}/buyer/{id}",
          new
          {
              controller = "buyer",
              action = "detail",
              id = UrlParameter.Optional,
          });

new.com/mytitle/buyer/id

因此,当有人访问旧网址时,他们会被重定向到我的新网址,但由于网址变为 new.com/buyer/detail/id/mytitle 而遇到 401 错误存在...我如何在我的新 URL 中重新路由旧网站中的旧地图路由。我在想它可以作为检查新网站的控制器/操作或在 maproutes 中以某种方式重定向它,有人有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc-3 http-status-code-301 maproute reroute


    【解决方案1】:

    我不会在控制器操作中执行此操作,因为请求不应该通过不正确的路由真正到达您的 MVC 应用程序。当您可以使用 IIS 重写规则通过映射捕获组来处理此问题时,这将是不必要的混乱:

    <rule name="OldNewRule" stopProcessing="true">
      <match url="^([a-z]+)/([a-z]+)/([0-9]+)/([a-z0-9]+)$" ignoreCase="true" />
      <action type="Redirect" url="http://www.new.com/{R:4}/buyer/{R:3}" redirectType="Permanent" />
        <conditions>
            <add input="{HTTP_HOST}" pattern="www\.old\.com" />
        </conditions>
    </rule>
    

    在这里,我假设您的 ID 是数字,而您的标题是字母数字。这将抓取您的捕获组{R:3}{R:4}(分别是“id”和“mytitle”)并将它们重新格式化为新域中的正确字符串。

    此外,它要求原始请求是针对 old.com 域的,因此如果您的现有重写首先发生,这将不起作用(您可能可以完全删除您拥有的那个,或者重新修改它以执行此操作正在做)。这可以防止它重定向任何匹配实际指向新域的路由,因此您仍然可以拥有此结构的 MVC 路由而不会破坏它们(与在控制器操作中执行此操作相比,这是一个明显的优势)。

    【讨论】:

      猜你喜欢
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 2016-03-25
      • 2016-02-22
      • 2017-02-27
      • 2016-01-24
      • 2015-03-30
      相关资源
      最近更新 更多