2013-06-12 55 views
6

ローカル開発者のテストでは、すべての要求をwww.somedomain.com/XXX(Xはパス)にキャッチし、localhost/somevdir/XXXに送信する必要があります。特定のドメインのURL書き換えルールを設定する

私は私のHOSTSファイルにこれを追加しました(C:\ WINDOWS \ SYSTEM32 \ drivers \ etcに):

127.0.0.1 www.mydomain.com 

その後は、IIS8(Windowsの8)で、私はへの結合を追加しました私ホストwww.mydomain.comの「デフォルトWebサイト」。これで、www.mydomain.com/test.htmlを参照し、テスト用のHTMLページを見ることができます。私の仮想ディレクトリはDefault Webサイト内にあります。私は最後のビットのWebサイトにURLリライトURLを追加します:

<rewrite> 
    <rules> 
     <rule name="mydomain.com" stopProcessing="true"> 
      <match url="^www.mydomain.com/(.*)" /> 
      <action type="Rewrite" url="localhost/MyVDir/{R:1}" logRewrittenUrl="true" /> 
     </rule> 
    </rules> 
</rewrite> 

しかし、それは動作しません。私は404が得られるので、試合は決して起こらないように見える。私はリダイレクトして書き直してみましたが、私は正規表現と他のいくつかの正規表現の微調整で^を使わずに試しました。誰かが私が間違ったことを説明することはできますか?

答えて

12

私は、次の動作するはずだと思う:

<rule name="mydomain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^(mydomain\.com|www\.mydomain\.com)$" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" /> 
</rule> 

任意のURLの一致が条件がチェックされているを確認します、とHTTP_HOSTサーバー変数が要求されたホスト名を確認する最も確実な方法です。あなたはREQUEST_FILENAME入力条件を削除することができますが、静的ファイルが常に提供されていることを確認するための素晴らしい健全性チェックとして機能します。

+0

ほぼ:) Iリダイレクト(リライトが機能しなかった)を使用しなければならなかった、とホストとの完全なパスを指定しなければならなかった( 'のhttp:// localhostの/ MyVDir/{R:1}')一度やったら、私はいました:) –

+0

ドメイン名のパターンでピリオドを逃してはいけませんか? $ –

+0

良い点、幸いにも、ほとんどの人がwwwXmydomain.comを持っていないので、ピリオドから一致するすべての文字は問題になる可能性は低いです(Xはどこですか)。ランダムな手紙。余分な括弧は必要ありません。 –

0

これは、両方のWWWを捕捉するのに適しています。非www。ドメインの2つのバージョン(正規表現ではオプションの?は括弧で囲まれています)は、ドメインを2度書く必要がないため、誤植の可能性が2倍になる可能性があります。

<rule name="mydomain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^(www.)?mydomain\.com)$" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" /> 
</rule> 
関連する問題