Перенаправление канонического URL-адреса IIS 7

Я хотел бы, чтобы веб-сайт всегда имел www в адресе и применял его с помощью перезаписи IIS.

Например, test.com станет www.test.com.

Типичный пример правила перезаписи:

<rule name="Canonical Host Name" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTP_HOST}" negate="true" pattern="^www\.test\.com$" />
  </conditions>
  <action type="Redirect" url="http://www.test.com/{R:1}" redirectType="Permanent" />
</rule>

Однако это требует от меня ввести полный URL-адрес моего веб-сайта. Он не будет работать для сред разработки и промежуточных сред с такими URL-адресами, как www.test.dev и www.test.stage.

Можно ли создать правило перезаписи IIS, которое будет обрабатывать все эти случаи?


person Evan    schedule 02.05.2011    source источник
comment
Если вы используете Visual Studio, преобразования конфигурации помогут с проблемами тестирования/развертывания.   -  person Bon    schedule 16.09.2014


Ответы (3)


Вы правы, что полный URL-адрес должен быть в файле web.config. Хотя у вас есть варианты.

  1. Вы можете использовать преобразование конфигурации, чтобы регулярное выражение соответствовало правильной среде.

  2. Кажется, не будет никакого вреда, если вы включите все три правила перезаписи URL в свой web.config. Похоже, что ваши среды изолированы, поэтому каждая среда будет соответствовать только одному из правил. Это может загромождать ваш web.config, но не ужасно.

Я бы выбрал вариант 1. Вы можете найти информацию о преобразованиях конфигурации здесь: http://msdn.microsoft.com/en-us/library/dd465326.aspx

person matt.mercieca    schedule 02.05.2011

У меня есть другое решение для вас:

<rule name="Canonical domain name" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_HOST}" negate="true" pattern="^www\.([.a-zA-Z0-9]+)$" />
    </conditions>
    <action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}" appendQueryString="true" redirectType="Permanent" />
</rule>
person Seyed Mohammad Hossein Mayboud    schedule 05.08.2011
comment
Я пробовал это правило, но оно не работало с URL-адресами IP-адресов. Проблема в том, что правило типа negate=true перехватывает IP-адреса с префиксом http://www.. - person mika; 30.10.2012

Я бы также предложил вам другой вариант для тестирования в локальной среде:

  1. Добавьте в c:\Windows\System32\drivers\etc\hosts:

127.0.0.1 www.example.com

  1. В диспетчере IIS выберите сайт и щелкните правой кнопкой мыши -> Изменить привязки.. -> Добавить..

  2. Введите имя хоста: www.example.com

  3. Откройте cmd и запустите iisreset

Теперь вы можете использовать www.example.com в браузере, привязанном к локальному хосту.

person Dzianis Yafimau    schedule 05.03.2015