Переписывание URL-адресов из https: / / в http: / / в IIS7
Я пытаюсь переписать URL-адреса в форме:
https://example.com/about
в форме
http://example.com/about
используя и IIS7 переписывания URL-адресов:
<!-- 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://
запросы являются плоскими невидимыми для механизма перезаписи.
правила работают нормально; см. ответ ниже.
4 ответов
получается, что У меня был порт: 443 привязан к другому веб-сайту!
вышеуказанные правила перезаписи отлично работают для http:// to https: / / rewriting и наоборот-хотя могут быть более оптимальные или простые способы сделать это.
оставив этот вопрос здесь для будущих путешественников, чтобы найти, так как я не видел много хороших примеров сценария перезаписи https:// to http:// в интернете.
этот пост немного старый, но я хотел ответить. Я использую ASP.Net MVC3, и ответ Фабио выше не сработал для меня. Самое простое решение, которое я придумал для обработки перенаправления https на http, все еще позволяя действительным страницам https запрашивать безопасный контент, было просто добавить правила белого списка над моими перенаправлениями 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>
ваше решение работает, но проблема в том, что ваша вторая инструкция убивает первую инструкцию для любых ссылок не (.)счетов/(.), включая ваши css, js и изображения.
вы можете использовать это правило https to 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>
пожалуйста, сначала рассмотрим обязательные https на ваш сайт для создания ниже модуля перенаправления для работы имеет важное значение (поэтому свяжите свое веб-приложение с самоподписанный или действительный сертификат)
заключительная часть в web.config для перенаправления https to адресу 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 в модуле перезаписи, см. ниже image
источник: посмотри tech-net для Больше детали и пошагового руководства.