2013-05-18 38 views
2

我试图在IIS 8.0上使用URL重写来重写开发人员计算机上的现有URL:s。原因是我不想更改现有(旧)代码。使用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> 

我想有我应该使用一些魔法的正则表达式。需要改变以

+0

那么匹配(.*)值,URL重写模块不会改变链接你写之前,反向引用在你的代码中,它只能重定向或重写请求的url。 – cheesemacfly

+0

我编辑的问题,包括我所做的。具体而言,这是一个出站规则,所以是的 - 它会重写我在代码中写入的链接。 –

+0

Woo,怎么说...我感到有点惭愧......无论如何,如果你改变你的模式为'foo.com(。*)$',并在动作中将值改为http://foo.localhost {R:1}'你可能会开始做得更好。 – cheesemacfly

回答

4

您的规则:

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

,该图形中,^(.*)foo.com匹配之前,从一开始就什么(0或多个字符)和foo.com(.*)$什么,直到结束。

然后可以使用在action,其中{R:1}将匹配(.*)foo.com{R:2}foo.com