【发布时间】:2015-04-24 03:54:57
【问题描述】:
我们有一个多域网站;同一个 Web 应用程序中的许多“网站”。 我们想将 url 重写为 "www.*" 样式。当您为每个站点执行该站点时,这很简单:
<rewrite>
<rules>
<rule name="Canonical host name">
<match url="^(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.mydomainTest\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.mydomainTest.com/{R:1}" />
</rule>
</rules>
</rewrite>
但是在为任何主机名尝试“规范”正则表达式时我们会遇到一些问题:
<rewrite>
<rules>
<rule name="Canonical host name">
<match url="^(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^([www.]{0,4})([A-Za-z0-9]*)(.com)([.ar]{0,3})$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.{R:2}.com{R:4}" />
</rule>
</rules>
</rewrite>
我们在regex101.com 中进行测试,我们正则表达式这样做:
正则表达式 = ^([www.]{0,4})([A-Za-z0-9]*)(.com)([.ar]{0,3})$
1) 域测试 =“www.mydomainTest.com.ar” 结果 =
{R:1} = www.
{R:2} = mydomainTest
{R:3} = .com
{R:4} = .ar
2) 域测试 = mydomainTest.com.ar 结果 =
{R:1} =
{R:2} = mydomainTest
{R:3} = .com
{R:4} = .ar
与 iis 7 中的“URL Rewrite 2.0”结果相同。
我们可以确定正则表达式工作正常,但我们的网页不会按预期重写。如果你访问“www.domain.com.ar”或“domain.com.ar”是一样的,什么都没有发生。但是,如果您使用第一个重写配置一切正常。 我希望我已经清楚地解释了这个问题。
好吧,我们忘记了什么?我们做错了什么?
非常感谢!
【问题讨论】:
-
第二条规则不起作用,因为 {R:2} 和 {R:4} 值为空。它试图匹配的模式是 ^(.*) 它只会给你 {R:0} 和 {R:1}。
-
如果我不使用 "
" 它应该可以工作吗?
标签: c# .net regex url-rewriting web-config