1

コントローラ/アクションの標準形式のURLを使用していたMVCWebサイトがあります。

最近、私はそれを次のように変更しました: 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 }
   );
4

1 に答える 1

1

古いURLから新しいURLへのマッピングにはスキーマが実際には表示されないため、古いコントローラー/アクションスキーマに一致するルートを追加し、それらを新しいサイト/コントローラー/アクションルートスキーマにマップすることをお勧めします。

したがって、次のルートを追加できます

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);
    }
}
于 2012-10-18T21:36:07.357 に答える