我有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
所以当有人去旧网址时,他们会被重定向到我的新网址,但是当网址变为 new.com/buyer/detail/id/mytitle 时,他们会遇到401错误存在...我如何在我的新网址中重新路由来自旧网站的旧地图路由。我认为它可以作为新网站的控制器/操作的检查或在maproutes重定向它以某种方式任何人有任何想法吗?
答案 0 :(得分:0)
我不会在控制器操作中执行此操作,因为请求不应该使用错误的路由到达您的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路由而不会破坏它们(在控制器操作中执行此操作的一个明显优势)。