2012-02-17 21 views
1

私は現在、それを指し示す2つのドメイン(例えば、www.domainA.comとwww.domainB.com)を持つASP .NET MVCサイトを持っています。 www.domainB.comを訪問してもwww.domainA.comを使用するようにすべてのリンクを変更したいと思います。ASP.NET MVCサイトで単一のドメインを使用する方法

私のすべての私のURLは、組み込みのUrl.ActionメソッドとHtml.ActionLinkメソッドで生成されています。

私はprevious questionの指示に従っていますが、それはうまく動作しません。ここで

私のカスタムルートさ:

public class MultipleDomainRoute : System.Web.Routing.Route 
{ 
    public MultipleDomainRoute(string url, IRouteHandler routeHandler) 
     : base(url, routeHandler) 
    { 
    } 

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
    { 
     VirtualPathData path = new VirtualPathData(this, "http://www.domainA.com/" + values["controller"] + "/" + values["action"]); 
     return path; 
    } 
} 

は、ここに私のカスタムルートハンドラさ:

class MyRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     return new MvcHandler(requestContext); 
    } 
} 

ここでは私のRegisterRoutes方法である:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Add(new MultipleDomainRoute("{controller}/{action}/{id}", new MyRouteHandler())); 

    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
    ); 
} 

ルートが動作しています(つまり、私のサイトをクラッシュさせない)が、実行すると、私のURLはちょうどhttp://localhostに追加されます...例えば、私は "http://localhost:56822/http:/www.domainA.com/Home/Index"を取得します。

これはなぜ動作しないのですか?

+1

アプリケーションでこれを行う必要がありますか? IIS 7のURL書き換えがこれを行います。 – Nick

+0

http://www.dotnetexpertguide.com/2011/08/iis-7-redirect-domaincom-to.html –

答えて

4

IIS 7を使用している場合は、Webサーバーレベルに実装する方がよい場合があります。

このようにすれば、HTTPヘッダーのブラウザに適切なステータスコードが返され、MVCアプリケーションはドメインやホスト名を心配することなく、独自のルーティングを処理できます。ほとんどの場合、Webサーバーのジョブです。

  1. :IISコンソールと選択URL書き換えであなたのウェブサイトを開き、IISの管理コンソール

    経由でこの

    1を達成し、次の手順に従っする方法は2つあります

    新しいルールを作成し、一致URLをワイルドカードに設定し、パターンをセカンダリドメインとして入力します。

  2. 条件を追加します。{HTTP_HOST}は、サイトのセカンダリドメインと同じです。
  3. リダイレクトする「アクションタイプ」を設定し、リダイレクトするパターンを入力します。 「http://mysite.com {R:1}」この場合、そのドメインequivilentにIPアドレスの後のすべてをマッピングすることになるので、mysite.net/mycontentは

をmysite.com/mycontentにリダイレクトすることになりますあなたのweb.config 2.

<system.webServer> 
<rewrite> 
<rules> 
<rule name="Redirect to mydomain.com" stopProcessing="true"> 
<match url=".*"/> 
<conditions> 
<add input="{HTTP_HOST}" pattern="^(www.)?mydomain.net"/> 
</conditions> 
<action type="Redirect" url="http://www.mydomain.com/{R:0}"/> 
</rule> 
</rules> 
</rewrite> 
</system.webServer> 

このアプローチは、あなたのサブディレクトリがマップされていることを確認し、あなたのサイトは、適切な応答コードが生成されると、検索エンジンフレンドリーなまま。

+0

ご返信いただきありがとうございます。残念ながら、私はホスト上のIIS設定にアクセスできないと思います。 –

+0

@Alan:Web.configを使用して設定できます。ローカルのIIS Expressで試してください。 – abatishchev

+1

Web.configでこれを設定する例を追加します – Nick

0

domainBをdomainAに転送するだけの理由はありませんか?私はほとんどのレジストラがあなたの前進のドメインを別のドメインにすると信じています。

+0

これはURL全体を転送しますか?例えば。 www.domainB.com/Home/Indexはwww.domainA.com/Home/Indexになりますか? –

+0

番号。私は誤解しました。あなたはニックの答えを探しています。 URLの書き換え。 –

0

これを行うにはいくつかの方法があります。

IIS7では、他にも言及しているように、組み込みのURL書き換えモジュールを使用すると、これを簡単に行うことができます。

http://www.dotnetexpertguide.com/2011/08/iis-7-redirect-domaincom-to.html

それとも、あなたのweb.configファイルに次のようなものを追加するを参照してください:

<configuration> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Redirect to WWW" stopProcessing="true"> 
      <match url=".*" /> 
      <conditions> 
      <add input="{HTTP_HOST}" pattern="^yoursite.com$" /> 
      </conditions> 
      <action type="Redirect" url="http://www.yoursite.com/{R:0}" redirectType="Permanent" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 

this siteから)

にIIS6では、ちょうど二のために新しいサイトを追加ドメインを選択し、[ホームディレクトリ]タブでプライマリドメインを指すように設定します。

enter image description here

2番目のサイト/セカンダリドメインのホストヘッダーへのすべてのリクエストが、元のサイトに含まれていたパスとURLパラメータを含め、プライマリドメインにリダイレクトされます。

これらのトップレベルオプションのいずれかを使用しない場合、おそらくCookieに問題があることに注意してください。ブラウザは「www.a.com」から「www.b.com」にクッキーを送信するのは好きではありません。

関連する問題