0

次のようなリクエストを変更するためにURLの書き換えを取得しようとしています

http://foo.bar.com/

http://bar.com/foo/

このように、URL 書き換えルールを Web 構成にポップしました

<rewrite>
  <rules>
      <rule name="SiteReWrite" stopProcessing="true">
          <match url="(.*)" />
          <action type="Rewrite" url="http://bar.com/{C:1}/"/>
          <conditions>
              <add input="{HTTP_HOST}" pattern="(.*)\.bar\.com" />
          </conditions>
      </rule>
  </rules>
</rewrite>

しかし、404.4 エラーが発生します。トレース ログ ファイルを見ると、そこにこれが表示されます

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
 <System>
  <Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
  <EventID>0</EventID>
  <Version>1</Version>
  <Level>4</Level>
  <Opcode>42</Opcode>
  <Keywords>0x0</Keywords>
  <TimeCreated SystemTime="2012-12-03T05:54:01.237Z"/>
  <Correlation ActivityID="{00000000-0000-0000-1000-0080030000FC}"/>
  <Execution ProcessID="7312" ThreadID="3180"/>
  <Computer>ULTRA</Computer>
 </System>
 <EventData>
  <Data Name="ContextId">{00000000-0000-0000-1000-0080030000FC}</Data>
  <Data Name="OldUrl">/</Data>
  <Data Name="NewUrl">http://bar.com/foo/</Data>
 </EventData>
 <RenderingInfo Culture="en-US">
  <Opcode>URL_CHANGED</Opcode>
 </RenderingInfo>
 <ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
  <EventGuid>{D42CF7EF-DE92-473E-8B6C-621EA663113A}</EventGuid>
 </ExtendedTracingInfo>
</Event>

NewUrl からは、すべてが桃色のように見えます。注: このインスタンスはキャッシュされているように見えますが、以前にイベントでルールの一致を見たことがあります。

URL http://bar.com/foo/を入力すると、正常に機能します。ユーザーに新しい URL を見せたくありません。ユーザーは、bar.com/foo ではなく foo.bar.com にいると考える必要があります。これは、mvc アプリにあるルーティング用です。

なぜこの奇妙な動作をしているのか、誰にも分かりますか? これには IIS Express 8 を使用していますが、IIS はまだ試していません。

4

2 に答える 2

0

あなたはすべきであり、すべきではredirectありませんrewrite

<rewrite>
  <rules>
      <rule name="SiteReWrite" stopProcessing="true">
          <match url="(.*)" />
          <action type="Redirect" url="http://bar.com/{C:1}/"/>
          <conditions>
              <add input="{HTTP_HOST}" pattern="(.*)\.bar\.com" />
          </conditions>
      </rule>
  </rules>
</rewrite>

本当に書き直したい場合は、ARR(Application Request Routing)モジュールをインストールして、IISをリバースプロキシとして設定する必要があります。

于 2012-12-03T11:43:45.910 に答える
0

ユーザーに URL の変更を見せたくなかったので、リダイレクトを使用できませんでした。しかし、私が言及すべきだったのは、すべてのサブドメインが同じサイトに行くということです. もう少し考えて、書き換えモジュールをもう少し読んで、MSDNの例を次のように変更しました。魅力のように機能する

<rewrite>
  <rules>
    <rule name="Rewrite subdomain">
      <match url="(.*)" /> <!-- rule back-reference is captured here -->
      <conditions>
        <add input="{HTTP_HOST}" pattern="^([^.]+)\.bar\.com$" /> <!-- condition back-reference is captured here -->
      </conditions>
      <action type="Rewrite" url="{C:1}/{R:1}" /> <!-- rewrite action uses back-references to condition and to rule when rewriting the url -->
    </rule> 
  </rules>
</rewrite>
于 2012-12-04T03:40:47.187 に答える