2016-12-21 7 views
1

私はドメイン/コントローラ/アクションのデフォルトルート設定を使用しています。RedirectPermanent - MVCと短いURL

たとえば、www.domain/Appointment/RequestAppointmentは、AppointmentコントローラとRequestAppointment ActionResultを呼び出します。

ソーシャルメディアや広告掲示板で使用するURLの短いバージョンのリダイレクトを作成するよう、マーケティング担当者から頻繁に要求されてきました。

www.domain/Appointment/RequestAppointmentwww.domain/appointmentとしたいと考えています。

私はこのケースでは、私はちょうど午前、それをやって問題を持っていない:

//Appointment Controller 
public ActionResult Index() 
    { 
     return RedirectToAction("RequestAppointment"); 
    } 

、私たちのSEOの人は私に新しいURLを語っている(www.domain /任命)は302を返していますリダイレクト(私が理解している)とそれはSEOにとって悪いです。彼らは私が私が使用して(SEOの観点から必要な)301リダイレクトを返すことができます理解し、だから、301

をしたいと思います:それは作品

//Appointment Controller 
public ActionResult Index() 
    { 
     return RedirectPermanent("http://www.domain.com/Appointment/RequestAppointment"); 

    } 

を、しかしそこには、より良い方法やベストプラクティスにありますこれを対応して?私はそれが珍しいことではないと思っていますが、何も見つかりません。

にリダイレクトされるwww.domain/controller/action/id形式に属する他の約10のユニークなURLで同じことを行う必要があります。

+2

['RedirectToActionPermanent'](https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.redirecttoactionpermanent(v = versus118).aspx)ではなく探している? – svick

+3

なぜこれをアプリケーションコードで扱うのですか?なぜサーバレベルでそれを処理しないのですか?あなたはこれらを10皿持っていると言いますか?あなたはそれらをすべて1つの正規表現でマッチさせることができますか? Webサーバーの設定でパターンマッチングと永久的なリダイレクトを行い、それを使って完了します。 – RubberDuck

答えて

2

リダイレクトを設定する必要はありません。指定されたデフォルト構造と一致しない場合でも、指定されたURLを特定のコントローラーアクションに自動的にマップするようにルーティングエンジンを設定できます。これらはデフォルトルートのBEFOREである必要があります。 「約束/もあなたが望むように、これらの多くを追加することができ、そして、彼らは心の中で200はなく、さらに301

routes.MapRoute("Request Appointment", 
       "appointment", // <= What you want the URL after "www.domain" to be 
       new { controller = "Appointment", action = "RequestAppointment" }); 

ベアを返しますが、これに代わって、あなたはURLを持っている必要があります索引アクションを取得する場合は「索引」を選択します。ただし、他の種類のマッピングでも同じことが言えます。しかし、あなたがいないサーバーまたはクライアントでは、次のURLの両方で同じページに取得することができます発生してリダイレクトします。

www.domain.com/appointment

www.domain.com/appointment/requestappointmentを