Как перенаправить все комбинации URL-адресов на https://www.mydomain.ext?

У меня есть сервер Windows 2008, на котором работает IIS7.5 с использованием перезаписи URL.

У меня есть URL-адрес, и я хочу, чтобы все перестановки этого URL-адреса перенаправляли на безопасную версию https с www. Так, например, я хочу следующее:

Чтобы перенаправить на:

https://www.mydomain.ext

Я установил 3 правила перезаписи, но, к сожалению, не могу заставить https://mydomain.ext перенаправляться.

Вот перезаписи, которые я использую, но средний не работает. Однако я бы предпочел одно правило для всех случаев.

    <!-- Redirect http non www to https www -->
    <rule name="Redirect http://mydomain.ext to www" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="mydomain.ext" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>

    <!-- Redirect https non www to http www -->
    <rule name="Redirect https://mydomain.ext to www" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="https://mydomain.ext" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>

    <!-- Redirect http to https -->
    <rule name="Redirect http to https" enabled="true">
        <match url="(.*)" ignoreCase="false" />
        <conditions>
            <add input="{HTTPS}" pattern="off" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>

person Vince De Mello    schedule 15.11.2015    source источник


Ответы (1)


Проблема с приведенным выше правилом заключается в том, что протокол (https) никогда не является частью хоста (HTTP_HOST), поэтому ваше правило никогда не будет совпадать. Вам нужно только два правила, но убедитесь, что они являются первыми, и остановите обработку правил (поскольку перенаправления обычно должны их останавливать в любом случае). так что это должно работать. Обратите внимание, что другой важной вещью является использование «полного совпадения строк с использованием ^ и $», вы также можете сделать правило, которое делает обратное, чтобы перенаправить на него все, что не является этим конкретным доменом (см. внизу):

<!-- Redirect http to https -->
<rule name="Redirect http to https" enabled="true" stopProcessing="true">
    <match url="(.*)" ignoreCase="false" />
    <conditions>
        <add input="{HTTPS}" pattern="off" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>

<!-- Redirect http non www to https www -->
<rule name="Redirect mydomain.ext to www" stopProcessing="true">
  <match url="*" />
  <conditions>
    <add input="{HTTP_HOST}" pattern="^mydomain.ext$" />
  </conditions>
  <action type="Redirect" url="https://www.{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>

Если вы на 100% уверены, что хотите использовать только домен, и никак иначе, вы можете остановить любые перестановки, которые когда-либо делают его, и перенаправить на канонический, используя это (вместо второго правила выше, в данном случае с помощью отрицания )

    <rule name="Mydomain" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
            <add input="{HTTP_HOST}" pattern="^www.mydomain.ext$" negate="true" />
        </conditions>
        <action type="Redirect" url="https://www.mydomain.ext/{R:1}" />
    </rule>
person Carlos Aguilar Mares    schedule 15.11.2015