2015-04-24 238 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,它的工作?你試過了嗎? –