Переписывание URL-адресов из https://в http://в IIS7
Я пытаюсь переписать URL-адреса из формы:
https://example.com/about
в форму
http://example.com/about
используя Переписывание URL IIS7:
<!-- http:// to https:// rule -->
<rule name="ForceHttpsBilling" stopProcessing="true">
<match url="(.*)billing/(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="false" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" />
</rule>
<!-- https:// to http:// rule -->
<rule name="ForceNonHttps" stopProcessing="true">
<match url="(.*)billing/(.*)" ignoreCase="true" negate="true" />
<conditions>
<add input="{SERVER_PORT}" pattern="^443$" />
</conditions>
<action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}{REQUEST_URI}" />
</rule>
Я в недоумении; Я просматривал веб-страницы для примеров и пробовал каждый синтаксис, о котором я могу думать. Правила перезаписи, которые я укажу, просто не работают вообще для любых запросов https, как если бы все запросы https://
были бы неактивны для механизма перезаписи.С >
правила работают нормально; см. ответ ниже.
Ответы
Ответ 1
Оказывается, что у меня был порт: 443 привязан к другому сайту!
Вышеупомянутые правила перезаписи отлично работают для http://для https://переписывания и наоборот - хотя могут быть более оптимальные или простые способы сделать это.
Оставив этот вопрос здесь для будущих путешественников, чтобы найти, поскольку я не видел много хороших примеров https://к http://сценарию перезаписи в Интернете.
Ответ 2
Этот пост немного стар, но я хотел ответить. Я использую ASP.Net MVC3, и ответ Fabio выше не работал у меня. Самое легкое решение, с которым я столкнулся, чтобы обрабатывать https-перенаправление на http, но при этом разрешать действительные страницы https запрашивать защищенный контент - это просто добавить правила Whitelist выше моих переадресаций https/http:
<rule name="WhiteList - content folder" stopProcessing="true">
<match url="^content/"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="false"/>
<action type="None"/>
</rule>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)billing/(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/billing/" redirectType="SeeOther" />
</rule>
<rule name="ForceNonHttps" stopProcessing="true">
<match url="(.*)billing/(.*)" ignoreCase="true" negate="true" />
<conditions>
<add input="{SERVER_PORT}" pattern="^443$" />
</conditions>
<action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}{REQUEST_URI}" />
</rule>
Ответ 3
Ваше решение работает, но проблема в том, что ваша вторая команда убивает первую команду для любых ссылок, а не (.) billing/(.), включая ваши css, js и изображения.
Вы можете использовать это правило https для http:
<rule name="HTTPS to HTTP redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{RequiresSSL:{R:1}}" pattern="(.+)" negate="true" />
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
<add input="{REQUEST_URI}" pattern="^(.+)\.(?!aspx)" negate="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}/{R:1}" />
</rule>
Ответ 4
сначала рассмотрите привязку https к вашему веб-сайту, чтобы сделать модуль перенаправления на работу крайне важным (поэтому привяжите свое веб-приложение к самозаверяемому или действительному)
окончательная часть в web.config для перенаправления https на http:
<rewrite>
<rules>
<rule name="Force NonHTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="on" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{REQUEST_URI}" />
</rule>
</rules>
</rewrite>
если вам нужен эквивалентный графический интерфейс IIS в модуле перезаписи, см. ниже изображение
![введите описание изображения здесь]()
source: посмотрите tech-net для более подробной информации и пошагового руководства.