Слишком много редиректов с перезаписью URL

У меня есть приведенная ниже конфигурация для перенаправления, которое работает для этого домена, но для версии с www оно не перенаправляет на https-версию сайта.

    <rule name = "Site Http" patternSyntax = "Wildcard" stopProcessing = "true">
      <match url = "*" />
      <conditions logicalGrouping = "MatchAny">
        <add input = "{HTTP_HOST}" pattern = "test.example.uk" />   
      </conditions>
      <action type = "Redirect" url = "https://www.example.com/{R:0}" />
    </rule>
    <rule name = "Site to HTTPS" stopProcessing = "true">
        <match url = "(.*)" />
        <conditions trackAllCaptures = "true">
            <add input = "{HTTP_HOST}" pattern = "test.example.uk" />
            <add input = "{HTTP_HOST}" pattern = "www.example.com" />
            <add input = "{HTTP_HOST}" pattern = "^((www\.)?example.com)$" />
            <add input = "{HTTPS}" pattern = "off" />
        </conditions>
        <action type = "Redirect" url = "https://{C:1}{REQUEST_URI}" appendQueryString = "false" redirectType = "Permanent"/>
    </rule>

Поэтому независимо от того, какой домен я указал, я хочу, чтобы он переходил на https-версию сайта (https://www.example.com ), но если я ввожу domain.com, он перенаправляет на https, если я ввожу тест .domain.uk переходит на https, но если я ввожу www.example.com, он остается на http?

если я добавлю

<add input = "{HTTP_HOST}" pattern = "www.example.com" />

к правилу Site Http я получаю слишком много ошибок перенаправления в браузере.

Как я могу перенаправить www.example.com на https?

learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/‌​…

Lex Li 17.12.2020 18:34

Привет, проблема решилась? Если вы считаете, что мой ответ полезен для вас, вы можете отметить его как ответ.

Ding Peng 18.12.2020 10:44
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Поддержка IIS для PHP
Поддержка IIS для PHP
Эта версия PHP требует наличия C++ Redistributable для VS 2019 (как минимум)
0
2
395
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать использовать это правило перезаписи URL:

<rewrite>
  <rules>
    <rule name = "Test" stopProcessing = "true">
        <match url = "^(.*)$" ignoreCase = "false" />
        <conditions>
            <add input = "{HTTP_X_FORWARDED_PROTO}" pattern = "^http$" ignoreCase = "false" />
         </conditions>
      <action type = "Redirect" url = "https://{SERVER_NAME}{URL}" redirectType = "Found" />
    </rule>
  </rules>
</rewrite>

Смысл следующего правила в том, что если заголовок HTTP X-Forwarded-Proto содержит «https», правило не будет выполнять перенаправление.

<add input = "{HTTP_X_FORWARDED_PROTO}" pattern = "^http$" ignoreCase = "false" />

Это правило позволит избежать циклических перенаправлений.

Нужно ли мне заменить оба правила из моего примера на тот, который вы предоставили? Также какова цель url = "https://{SERVER_NAME}{URL - я все еще могу использовать то, что у меня есть в моем исходном примере?

Computer 18.12.2020 07:28

Вы можете использовать его или напрямую добавить <add input = "{HTTP_X_FORWARDED_PROTO}" pattern = "^http$" ignoreCase = "false" /> в правило перезаписи URL.

Ding Peng 18.12.2020 08:05

SERVER_NAME: имя хоста сервера, псевдоним DNS или IP-адрес, как они будут отображаться в URL-адресах, ссылающихся на самих себя. URL-адрес: базовая часть URL-адреса без какой-либо информации о строке запроса.

Ding Peng 18.12.2020 08:11

Другие вопросы по теме