Назад | Перейти на главную страницу

Лучший способ перенаправить весь HTTP на HTTPS в IIS

Мы хотим, чтобы ВСЕ сайты на нашем веб-сервере (IIS 10) применяли SSL (т.е. перенаправляли HTTP на HTTPS).

В настоящее время мы «требуем SSL» на каждом сайте и настраиваем 403 error обработчик для выполнения 302 redirect на https-адрес этого конкретного сайта.

Это прекрасно работает. Но это мучительно для каждого сайта, есть много места для человеческой ошибки.

В идеале я бы хотел создать постоянный 301 redirect на все HTTP://* к HTTPS://*

Есть ли простой способ сделать это в IIS?

Модуль 2.1 перезаписи URL-адресов IIS для IIS7 + может быть вашим другом. Модуль можно скачать с Перезапись URL-адреса IIS. Использование модуля перезаписи URL и Справочник по настройке модуля перезаписи URL 2.0 объясните, как пользоваться модулем.

После установки модуля вы можете создать перенаправление для всего хоста с помощью диспетчера IIS. Выбрать Перезапись URL, Добавить правило (я) ..., и Пустое правило.

Название:
Перенаправление на HTTPS

Соответствующий URL
Запрошенный URL: Matches the Pattern
С помощью: Wildcards
Шаблон: *
Игнорировать регистр: Проверено

Условия
Логическая группировка: Match Any
Ввод условий: {HTTPS}
Проверьте, есть ли строка ввода: Matches the Pattern
Шаблон: OFF
Игнорировать регистр: Проверено
Отслеживайте группы захвата в разных условиях: Не проверено

Переменные сервера
Оставьте поле пустым.

Действие
Тип действия: Redirect
URL перенаправления: https://{HTTP_HOST}{REQUEST_URI}
Добавить строку запроса: Не проверено
Тип перенаправления: Permanent (301)

Примените правило и запустите IISReset (или нажмите Restart в диспетчере IIS)

В качестве альтернативы, после установки модуля вы можете изменить файл applicationHost.config следующим образом:

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>

Мои исследования показывают, что это может быть лучший способ перенаправления:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>