使用 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>

相关内容