301重定向和匹配旧的地图到新的



我有2个网站一个旧的叫www.old.com和一个新的叫www.new.com。旧网址有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

所以当有人去到旧的url,他们得到重定向到我的新url,但他们遇到401错误的url变成new.com/buyer/detail/id/mytitle当然不存在…我怎么能在我的新URL重新路由旧地图路线从旧网站。我在想它可以在新网站的控制器/动作中检查或者在maproutes中重定向有人有什么想法吗?

我不会在控制器操作中这样做,因为请求不应该通过错误的路由到达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路由,而不会破坏它们(在控制器操作中这样做的一个明显优势)。

相关内容

  • 没有找到相关文章

最新更新