2010-11-19 16 views
0

IIS 7でHTTPModuleを実行して、さまざまなURL書き換えサービスを提供しています。例えばIIS7 HTTPModuleがMVCサブアプリケーションのパスを書き換えることができません

public void Init(HttpApplication context) 
{ 
    ... 
    HttpContext.Current.RewritePath(landingPage.NewPath, 
           string.Empty, 
           landingPage.NewQueryString + 
           ((landingPage.NewQueryString == string.Empty) ? "" : "&") + 
           queryString); 
    ... 
} 

私はMVCで書かれた、独自のアプリケーションプールを持つサブアプリケーションを持っている:http://www.SomeSiteWithURLrewrite.com/SubMVCApplication/

このモジュールは素晴らしい作品サブアプリケーションとして作成されたMVCアプリケーションを除きます。

私が書き換えられますhttpリクエストますhttp://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten

を私はHTTPエラー404.0受け取る - 見つかりません

404エラーページには、物理​​パス「C:{RootDirectory} \」に書き換えられた「http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten」の呼び出しがあることが示されています。 SubMVCApplication \ "を" StaticFile "のハンドラで置き換えます。

piplineがMVC要求として「HttpContext.Current.RewritePath」を認識しない理由がわかりません。それはMVCアプリケーションがそれ自身のアプリケーションにあるからですか?

は、どのように私はあなたがどの問題のResponse.Redirectを行う必要がありますRewritePath(か何か似た)を呼び出し、アプリケーションの境界を越えた場合は、IISはサブアプリケーション

答えて

2

page.in ASP.Net MVCをレンダリングすることができますクライアントベースのHTTP 301リダイレクトコマンド

ReWritePathサーバーのみのコマンドで、ルーティングテーブルなどへのアクセスを必要とするこのように、現在のアプリケーションの境界

でページプロキシを作成する以外に簡単な答えはありません各Webアプリケーションはコンテンツを通過するが、これは非常に非効率的である

server.com/a/xをserver.com/b/xに書き換えると、アプリケーションの境界の変更を検出する必要があり、代わりにリダイレクトでHTTPRequestを発行してserver.com/b/xコンテンツを取得し、そのコンテンツをクライアントに渡しますか?リソースパスなどは大きな問題になるので、おそらく良い考えではないかもしれません。

0

私は完全にTFD's answerに同意しません。 すべては、実装したいアルゴリズムに依存します。

HereルーティングとURLの書き換えに関する詳細な説明があります。 my.site.com/content/faq.aspx?parent=page3/page2/page1

contentはコントローラ名で

faqは次のとおりです。my.site.com/page1/page2/page3/faq.aspx
へ:ツリーベースのURL構造を実装する理由のために私のためとして は、URL変換

に、ルーティングの前にURL書き換えを使用することをお勧めします一意の識別子。

データは、データベースまたはサイトマップファイルから取得できます。