网址重写不按预期工作

时间:2015-04-24 03:54:58

标签: c# .net regex url-rewriting web-config

我们有一个多域名网站;同一个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

Test 1 www.mydomainText.com.ar

2) domain test = mydomainTest.com.ar 结果=

   {R:1} = 
   {R:2} = mydomainTest
   {R:3} = .com
   {R:4} = .ar

Test 2 mydomainText.com.ar

与iis 7中的“URL Rewrite 2.0”相同的结果。

我们可以肯定正则表达式工作正常,但我们的网站不会按预期重写。如果您访问“www.domain.com.ar”或“domain.com.ar”是相同的,则不会发生任何事情。但是,如果你使用第一次重写配置一切正常。 我希望我已经清楚地解释了这个问题。

嗯,我们忘了什么?我们做错了什么?

非常感谢!

1 个答案:

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