2

www.old.comと呼ばれる古いものとwww.new.comと呼ばれる新しい2 つの Web サイトがあります。古い URL には新しい Web サイトへの 301 パーマネント リダイレクトがありますが、新しい Web サイトには別のマップルートがあるため、すべてが一致していません。古い Web サイトには次のタイプのルートがあります。

      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

したがって、誰かが古い URL にアクセスすると、新しい URL にリダイレクトされますが、URL がnew.com/buyer/detail/id/mytitleになるため、401 エラーが発生します。 URL は、古い Web サイトから古い maproute を再ルーティングします。新しいWebサイトのコントローラー/アクションのチェックとして、またはmaproutesリダイレクトで何とかできると思っていましたが、何かアイデアはありますか?

4

1 に答える 1

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 ルートを壊すことなく保持できます (コントローラー アクションでこれを行うよりも明らかな利点の 1 つ)。

于 2013-06-13T18:35:14.570 に答える