我们有一个多域名网站;同一个Web应用程序中的许多“网站”。 我们想要将网址重写为“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进行测试,我们正则表达式:
regex = ^([www.]{0,4})([A-Za-z0-9]*)(.com)([.ar]{0,3})$
1) domain test =“www.mydomainTest.com.ar” 结果=
{R:1} = www.
{R:2} = mydomainTest
{R:3} = .com
{R:4} = .ar
2) domain test = 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”是相同的,则不会发生任何事情。但是,如果你使用第一次重写配置一切正常。 我希望我已经清楚地解释了这个问题。
嗯,我们忘了什么?我们做错了什么?非常感谢!
答案 0 :(得分:0)
如果我没有误会,你就是否定了这个条件,所以你的变量将不存在......
试一试
<system.webServer>
<rewrite>
<rules>
<rule name="Canonical host name" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(www.)(.*)$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}" appendQueryString="true" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
</system.webServer>