Найкращий спосіб перенаправити всі HTTP на HTTPS у IIS


26

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

Наразі ми вимагаємо SSL на кожному веб-сайті та налаштовуємо 403 errorобробник для виконання 302 redirecthttps-адреси для цього конкретного сайту.

Це чудово працює. Але це болісно для кожного окремого сайту, є багато місця для людських помилок.

В ідеалі я хотів би створити постійний 301 redirectна всі , HTTP://*щобHTTPS://*

Чи є простий спосіб зробити це в IIS?


Чи не можете ви написати сценарій, щоб зробити цю зміну для кожного сайту, що одночасно зменшить адміністративний тягар, а також допоможе запобігти помилкам помилок?
Тодд Вілкокс

1
Назва неправильна. Я думаю, було покликано прочитати "Найкращий спосіб перенаправити всі HTTP на HTTPS в IIS"
Мік

@ToddWilcox Ви можете навести приклад такого сценарію?
користувачSteve

Не використовуйте IIS

Відповіді:


40

Модуль перезапису URL-адреси IIS для IIS7 + може бути вашим другом. Модуль можна завантажити з переписати URL-адресу IIS . Використовуючи модуль перезапису URL-адреси та довідку про конфігурацію модуля переписати URL-адресу, поясніть, як користуватися модулем.

Після встановлення модуля ви можете створити широке переспрямування хоста за допомогою IIS Manager. Виберіть Перезапис 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 (або натисніть кнопку Перезапустити у менеджері 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>

Чи буде ця робота для постійних переадресацій 301?
користувачSteve

@userSteve відповідно до відповіді вище, ви можете вибрати тип переадресації.
BE77Y

@userSteve, так, так, ви повинні мати можливість змінити тип перенаправлення на 301 і отримати ті самі результати
sippybear

1
@sippybear ще одне питання - що означає input = "{HTTPS}"? Якщо це буде {HTTP}, оскільки це буде вхід, а HTTP - вихід?
користувачSteve

3
{HTTPS} - це змінна, яку ви запитуєте, щоб дізнатися, чи захищено з'єднання. Докладніше про це можна прочитати тут: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… У цьому випадку ми перевіряємо, чи {HTTPS} "вимкнено", а потім перенаправляємо, якщо це
sippybear

1

Мої дослідження показують, що це може бути кращим способом перенаправлення:

<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>

1
Чи можете ви пояснити, чому це краще?
користувачSteve

Мені шкода, що я не можу пояснити це моєю самою, просто прочитайте в кількох місцях, що синтаксис краще.
Впавший ангел

1
у вас є джерела?
dangel

1
Це точно те саме правило, що і в serverfault.com/a/893804/7184 , але написане за допомогою регулярних виразів та групування Match All. Одним із можливих моментів може бути те, що вираз правила використовує параметри за замовчуванням і є коротшим.
bzlm

Я на IIS 10, і вибрана відповідь не працювала для мене. Чомусь IIS не визнав синтаксис як дійсне правило. Я вставив ваш код і він працював негайно, дякую за обмін.
Йордан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.