0

У меня есть несколько сайтов в IIS, которые указывают на одну и ту же физическую структуру на жестком диске, т.е. есть только один файл веб-конфигурации для всех сайтов.IIS 301 перенаправляет не-www на www для многопользовательских сайтов, указанных на одном физическом пути. Regex

Мне нужно перенаправить все не-www-трафик для всех сайтов с помощью www.

Например, это условие в URL Rewrite IIS будет работать на одном домене, но она не работает для меня, потому что доменное имя должно быть указано:

Input: {HTTP_HOST} 
Type: Matches the Pattern 
Pattern: ^domain.com\$ 

Redirect URL: http://www.domain.com/{R:1} 
Redirect Type: Permanent 301 

Так в идеале мне нужно два шаблоны регулярных выражений, один для шаблона, который соответствует всем доменам (это смесь из .co.uk, .com, .uk.com и т. д.), а другая - для перенаправления URL-адреса переадресации.

Она также должна работать на https: //

Может кто-нибудь помочь, все советы очень ценится?

ответ

1

Вы не можете сопоставить его непосредственно с регулярным выражением, поскольку регулярное выражение применяется только к пути, который не включает хост (доменное имя): Accessing URL Parts from a Rewrite Rule.

Если вам необходимо включить условие об имени хоста, вам необходимо добавить <condition> к вашему правилу:

< хозяина > доступен в переменной HTTP_HOST сервера и может быть доступен с помощью условие в пределах правила.

Условия определяются здесь. .

Наконец, вы можете вернуться к условиям аналогично тому, как вы ссылаетесь на совпадения регулярных выражений в пути, но используя синтаксис {C:1} вместо или {R:1}.

Для окончательной подсказки о том, как это сделать, see this. В основном вы должны сделать адаптировать этот rulte к конкретному делу:

<rule name="Rewrite subdomain"> 
    <match url="^(.+)" > 
    <!-- rule back-reference is captured here --> 
    <conditions> 
    <add input="{HTTP_HOST}" type="Pattern" 
      pattern="^([^.]+)\.mysite\.com$"> 
    <!-- condition back-reference is captured here --> 
    </conditions> 
    <action type="Rewrite" url="{C:1}/{R:1}" /> 
    <!-- rewrite action uses back-references to condition and 
     to rule when rewriting the url --> 
</rule> 

Yo нужно сделать только два простых изменения:

  • изменить шаблон условие, чтобы захватить только не-WWW имен хостов. Это регулярное выражение: (^(?!www\.).*$) будет захватывать все имена хостов, которые не начинаются с "www."
  • переписать URL, включая отсутствующий www. В этом случае, используйте: url="www.{C:1}/{R:1}"

Примечания: это правило делает перезапись. Вы можете сделать перенаправление вместо этого, разрешить другое правило после этого сделать перенаправление.

ПРИМЕЧАНИЕ 2: вам необходимо создать два разных правила для обработки http и https аналогичным образом. Они находятся на переменной сервера {HTTPS}, которая может быть "on" или "off".В каждом правиле вы должны включить действие url="http://www.{C:1}/{R:1}" или url="https://www.{C:1}/{R:1}"

+0

Большое спасибо за подсказки. Итак, {C: 1} ссылается на часть {HTTP_HOST} условия? Извините, я бесполезен с регулярным выражением, поэтому я не мудрее с изменением шаблона состояния. – Jonathan

+0

Я действительно думал, что мой шаблон должен быть^(. *) $, Но я не уверен – Jonathan

+0

Я нашел этот пост, но он не " t для меня: http://weblogs.asp.net/owscott/redirecting-non-www-to-domain-equivalent – Jonathan

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