4

IIS 8.0 で URL 書き換えを使用して、開発者のマシンで既存の URL を書き換えようとしています。その理由は、既存の (古い) コードを変更したくないからです。

私が達成しようとしているのは、応答ストリームで次のコードを変更することです:

<a href="http://www.foo.com/path/page.asp?a=1">Foo Page</a>

の中へ:

<a href="http://www.foo.localhost/path/page.asp?a=1">Foo Page</a>

しかし、私が試しているとき、私は次のようになります:

<a href="foo.localhost">Foo Page</a>

ご存知のように、これはあまり満足のいく結果ではありません。

それで、私がやろうとしていることを達成するために、この書き直しを適切に行うにはどうすればよいですか?

アプリケーション変数などを使用してこれを行うより良い方法があることは知っていますが、それは古い解決策であり、アプリケーション自体をあまりいじりたくありません。変更は最小限に留めたいと思います。少なくとも最初は。

私が試したルールは次のようになります。

<system.webServer>
  <rewrite>
    <outboundRules>
      <rule name="foo.com" enabled="true">
        <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="foo.com" />
        <action type="Rewrite" value="foo.localhost" />
      </rule>
    </outboundRules>
  </rewrite>
</system.webServer>

私が使用すべきいくつかの正規表現マジックがあると思います。

4

1 に答える 1

6

ルールを次のように変更する必要があります。

<rule name="foo.com" enabled="true">
  <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^(.*)foo.com(.*)$" />
  <action type="Rewrite" value="{R:1}foo.localhost{R:2}" />
</rule>

パターンでは、最初から最後までの任意^(.*)(0 文字以上) に一致します。foo.com(.*)$foo.com

その後、 で後方参照を使用できますaction。ここでは、前に一致{R:1}する値と後に一致する値を取得します。(.*)foo.com{R:2}(.*)foo.com

于 2013-05-19T02:44:03.417 に答える