2013-08-13 1 views
3

В контексте URL Rewrite 2,0 в IIS 7.5, я хочу, чтобы иметь возможность применять канонические доменные имена для нескольких доменов для нескольких стран участка площади, как мало правил, насколько это возможно. Что-то вроде этого:IIS 7.5 Канонических правил URL Rewrite для нескольких доменов

<rule name="UK Host Name"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^company\.co\.uk$" /> 
     <add input="{HTTP_HOST}" pattern="^company\.co$" /> 
     <add input="{HTTP_HOST}" pattern="^company\.org$" /> 
     <add input="{HTTP_HOST}" pattern="^company\.net$" /> 
     <add input="{HTTP_HOST}" pattern="^company\.uk\.com$" /> 
     <add input="{HTTP_HOST}" pattern="^www\.company\.co\.uk$" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://www.company.co.uk/{R:1}" /> 
</rule> 
<rule name="France Host Name"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^company\.fr$" /> 
     <add input="{HTTP_HOST}" pattern="^company-france\.com$" /> 
     <add input="{HTTP_HOST}" pattern="^www\.company\.fr$" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://www.company.fr/{R:1}" /> 
</rule> 

Проблемы с вышеизложенным, я считаю, что каждый из этих условий должен быть истинным, следовательно, logicalGrouping="MatchAll" но если изменено MatchAny того последним условия (с negate="true") будет игнорироваться, то есть мы запустите правило перенаправления, даже если пользователь посещает правильный домен.

Единственная альтернатива, о которой я могу думать, - это иметь отдельное правило перезаписи для каждого отдельного домена, но может быть огромное количество доменов, и это может стать беспорядочным. Там будет много других правил перезаписи и карт, как есть.

Как я могу создать более сложные наборы условий, а не просто все или любое?

ответ

7

Хитрость заключается в том, чтобы объединить домены, которые вы хотите, чтобы соответствовать против в одно правило, с или | оператора, так что у вас есть только один «позитивный» правило и один «негативный» правило, которое должно MatchAll. Например:

<rule name="UK Host Name"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^company\.(co(\.uk)?|org|net|uk\.com)$" /> 
     <add input="{HTTP_HOST}" pattern="^www\.company\.co\.uk$" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://www.company.co.uk/{R:1}" /> 
</rule> 
<rule name="France Host Name"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^company(-france)?\.(fr|com)$" /> 
     <add input="{HTTP_HOST}" pattern="^www\.company\.fr$" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://www.company.fr/{R:1}" /> 
</rule> 

Это может в конечном итоге дать вам небольшой шанс, что ваше регулярное выражение соответствует слишком большому числу доменных имен. Например. шаблон pattern="^company(-france)?\.(fr|com)$" также соответствует company.com, который может быть нежелателен. В этом случае вы должны быть более конкретными и, например, измените шаблон на pattern="^company\.fr|company-france\.com$".

+0

Ух, я хочу ударить себя (и удалить свой вопрос)! – Zac

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

  • Нет связанных вопросов^_^