使用 URL 重寫更改部分 URL

使用 URL 重寫更改部分 URL

我正在嘗試在 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>

正規表示式是解決這個問題的最佳方案嗎?

答案1

我在另一個論壇回答了這個問題。這是對該答案的回顧,以供記錄。

正確的重寫如下所示:

<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="{R:1}foo.localhost{R:2}" />
      </rule>
    </outboundRules>
  </rewrite>
</system.webServer>

相關內容