Я работаю над веб-сайтом, который использует IIS 7 функция перезаписи URL, чтобы сделать постоянное перенаправление от example.com до www.example.com, а также переписывает от подобных доменных имен до "основного", такой как от www.examples.com до www.example.com.
Это переписывает правило - показанный ниже - работал хорошо в течение некоторого времени теперь. Однако мы недавно добавили поддержку HTTPS и заметили, что, если пользователи посещают один из URL, которые будут переписаны на www.example.com затем, HTTPS отбрасывается. Например, если бы пользователь посещает https://example.com, они перенаправляются на http://www.example.com, тогда как мы хотели бы, чтобы они были отправлены в https://www.example.com.
Вот переписать правило интереса (в Web.config):
Как Вы видите, атрибут URL элемента действия указывает непосредственно на http://, таким образом, я добираюсь, почему https://example.com перенаправляется на http://www.example.com. Мой вопрос, как я фиксирую это? Я пытался (наивно) просто отбросить часть http:// от атрибута URL, но это не работало.
Принял ответ с помощью моих коллег.
Мне нужно было использовать несколько правил с условием на {HTTPS}. Обратите внимание на условие {HTTPS} в правилах ниже.
<rule name="Canonical Host Name (HTTP)" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTPS}" pattern="OFF" />
<add input="{HTTP_HOST}" pattern="^example\.com$" />
</conditions>
<action type="Redirect" url="http://www.example.com/{R:1}" redirectType="Permanent" />
</rule>
<rule name="Canonical Host Name (HTTPS)" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTPS}" pattern="ON" />
<add input="{HTTP_HOST}" pattern="^example\.com$" />
</conditions>
<action type="Redirect" url="https://www.example.com/{R:1}" redirectType="Permanent" />
</rule>
Затем я повторил приведенную выше пару правил для альтернативных доменных имен.