2015-04-24 4 views
1

У нас есть многодоменный веб-сайт; многие «веб-сайты» в одном и том же веб-приложении. И мы хотим переписать URL-адрес на стиль «www. *». Подмигнул просто, когда вы делаете этот сайт для каждого сайта:Url rewrite не работает должным образом

<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 

Test 1 www.mydomainText.com.ar

2) домена тест = mydomainTest.com.ar результат =

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

Test 2 mydomainText.com.ar

Тот же результат с "URL Rewrite 2.0" в iis 7.

Мы можем быть уверены, что регулярное выражение работает нормально, но наш веб-ресурс DON'T переписывается так, как ожидалось. Если вы получаете доступ к «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, это сработало? Вы попробовали? –

Смежные вопросы