2015-04-24 346 views
1

我们有一个多域名网站;许多“网站”在同一个Web应用程序中。 而我们想要将网址改写为“www。*”风格。当你做每站点的网站It's简单:Url重写不按预期工作

<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) 域test = “www.mydomainTest.com.ar” 结果=

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

Test 1 www.mydomainText.com.ar

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

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

Test 2 mydomainText.com.ar

相同的结果用 “URL重写2.0” in iis 7.

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

那么,我们忘记了什么?我们做错了什么?

非常感谢!

+0

第二条规则将无法工作,因为{ R:2}和{R:4}值为空。它试图匹配的模式是^(。*),它只会给你{R:0}和{R:1}。 – TejSoft

+0

如果我不使用“”它应该工作? – Rodrigo

回答

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

@Rodrigo,它的工作?你试过了吗? –