2009-04-04 17 views
4

私はこの質問を書いており、その過程で、少し難しく思うようになりました。私はそれを解決した理由を完全に理解していません。IIS 7のURL書き直しと2つのドメイン

私は2つのドメインを登録した共有ホストにアカウントを持っています。私はAsp.Netスタックを使用してブログやいくつかのサイトを運営しています。両方のドメインはルートを指しています。最初は私がサインアップするのに使用したオリジナルです、2番目は私が追加したルートドメインポインタです。期待と私のように振る舞うこと、

 
Root      (www.domain1.com) 
Root --\ Blog    (www.domain1.com/blog) 
Root --\ Site2   (should be directed here if www.domain2.com) 
Root --\ Site2 --\ Junk (www.domain2.com/junk) 

今、あなたはwww.domain1.comやwww.domain1.com/blogを入力した場合:

ディレクトリ構造を:ここで私はそれが動作するようにする方法でありますそれでうまくいく。 www.domain2.comために、私は(web.configファイルから)次のように構成された書き換え規則を有する:

<rule name="Domain2"> 
    <match url="(.*)(/)?" ignoreCase="false" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="(www\.)?domain2\.com" ignoreCase="false" /> 
    </conditions> 
    <action type="Rewrite" url="/site2/{R:1}" /> 
</rule> 

そのルールは、ホストがdomain2.comであれば任意のパスと一致するようになっている、パスをピックオフ要求されたリソースに転送し、適切にフォーマットします。したがって、誰かがwww.domain2.com/junk/default.aspxをIISに入力すると、これはユーザーが知らないうちにwww.domain2.com/site2/junk/default.aspxに解決されます。これは、ユーザがサブフォルダに末尾のスラッシュを入力しない場合を除き、のほとんどはです。 IE:

www.domain2.com(作品が)
www.domain2.com/(作品)
www.domain2.com/junk/(作品)
www.domain2.com/junk(doesnのIIS 7はここでその頭脳を失い、www.domain2.com/site2/junkのようにフォーマットします。後続のスラッシュに対して2回目のリクエストが自動的に発行され、404が発生するからです。

だから、私はするアクションを更新:

<action type="Rewrite" url="/site2/{R:1}/" /> 

これは、それを解決しているようだが、なぜないIIS 7は今www.domain2.com/junk2/default.aspx/を吐き出すのですか?ドキュメントの拡張子に後続のスラッシュを追加しないことをどうやって知っていますか?

答えて

3

www.domain2.com/junkは、一致にスラッシュを追加したため機能しませんが、一致する実際のURLには一致しません。それはちょうど "ジャンク"を含んでいます。

<rule name="Domain2" stopProcessing="true">

を一致が見つかった場合はそれが他のルールを評価しません:

また、あなたが追加する必要があります。私はあなたが混乱していることがあなたが設定した他のルールであることを見るかもしれないと思う。

関連する問題