Ответ 1
Не уверен, что вы все еще ищете ответ, но здесь. После некоторого поиска, проб и ошибок, я нашел успех со следующими правилами. Большинство примеров, с которыми я столкнулся, излишне сложны в отношении сопоставления шаблонов и вводят другие переменные, которые не позволяют правилам работать по назначению. Правила, приведенные ниже, могут быть применены к любому веб-сайту, и ничто не жестко закодировано, поэтому всегда должно быть прямое копирование и вставка:
<rule name="Redirect to WWW" stopProcessing="true" >
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\." negate="true"/>
</conditions>
<action type="Redirect" url="https://www.{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" />
</rule>
<rule name="Redirect to HTTPS">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="OFF"/>
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" />
</rule>
Следует отметить две вещи: redirectType = "Постоянный" приведет к тому, что правило будет применяться до тех пор, пока история/кеш браузера не будут опущены; это должно быть хорошо, так как браузер будет продолжать работу. Кроме того, appendQueryString = "false" необходимо, так как переменная сервера {HTTP_URL} уже включает полный запрос; по умолчанию опция "true" и приведет к дублированию запросов.