我有一个MVC网站,过去常常使用标准格式的URL:Controller / Action。
最近,我已将其更改为:Site/Controller/Action.
问题是,我的网站有几个链接,它们遵循旧格式,我想相应地重定向它们。
例如:mydomain.com/Home/CustomerSearch
现在应该转到mydomain.com/Online/Home/CustomerSearch
而:mydomain.com/AffiliatesHome/CustomerSearch
现在应该转到mydomain.com/Affiliate/AffiliatesHome/CustomerSearch
如何通过添加额外的路由来处理重定向,具体取决于它们所带来的链接?
我正在使用的当前路由是:
routes.MapRoute(
"Default", // Route name
"{site}/{controller}/{action}/{id}",
new {site="IS", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:1)
由于我没有在旧到新的URL映射中看到模式,我建议添加与旧的Controller / Action Schema匹配的路由,并将它们映射到新的Site / Controller / Action路由模式。
所以你可以添加以下路线
routes.MapRoute(
"LegacyHome",
"Home/{action}/{id}",
new { site="Online", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"LegacyAffiliates",
"AffiliatesHome/{action}/{id}",
new { site="Affiliate", controller = "AffiliatesHome", action = "Index", id = UrlParameter.Optional }
);
从SEO的角度来看,这并不理想,因为同一页面有不同的URL。通过状态码301的永久重定向和在该位置传递的新URL更适合。
您可以构建一个重定向控制器并使用旧版路由将遗留URL映射到重定向控制器,就像这样
routes.MapRoute(
"LegacyHome",
"Home/{newAction}/{id}",
new { controller = "Redirect", action = "Redirect", newSite = "Online", newController="Home", newAction = "Index", id = UrlParameter.Optional }
);
重定向控制器的代码
public class RedirectController : Controller
{
public ActionResult Redirect(string newSite, string newController, string newAction)
{
var routeValues = new RouteValueDictionary(
new
{
site = newSite,
controller = newController,
action = newAction
});
if (RouteData.Values["id"] != null)
{
routeValues.Add("id", RouteData.Values["id"]);
}
return RedirectToRoutePermanent(routeValues);
}
}