由于我在您的旧 URL 映射中没有真正看到架构,我建议添加与旧 Controller/Action 架构匹配的路由并将它们映射到新的 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);
}
}