2009-10-08 3 views
33

Я пытаюсь переписать ссылки из формы:Переписывание URL-адресов с https: // для HTTP: // в IIS7

https://example.com/about 

форме

http://example.com/about 

с использованием IIS7 URL rewriting:

<!-- 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:// были без изменений для механизма перезаписи.

правила работают нормально; см. ответ ниже.

+0

Запах как элементарная функция безопасности 'feature' для меня –

+0

Это пахнет вопросом о сбое сервера для меня ... –

+0

@Charlie, no.Это один из тех вопросов, который является как кодированием, так и администратором, поэтому оставьте его на том сайте, на котором он был запущен (например, на многих сценариях). –

ответ

25

Оказывается, что У меня был порт: 443 привязан к другому сайту!

Вышеупомянутые правила перезаписи отлично работают для http: // для https: // переписывания и наоборот - хотя могут быть более оптимальные или простые способы сделать это.

Оставляя этот вопрос здесь для будущих путешественников, чтобы найти, так как я не видел много хороших примеров https: // к http: // сценарию перезаписи в Интернете.

+1

Ouch. Взрыв головой здесь. O –

+1

Я обнаружил, что с приведенным выше https to http rule все мои ресурсы css, javascript и изображения на моих страницах https были выбраны как http. Я отклонил это правило и добавил исходящее правило, чтобы переписать теги href на моих защищенных страницах как http: // {HTTP_HOST}/{R: 0}, чтобы заставить коммутатор с https на http. Не улавливает непреднамеренную ручную навигацию на незащищенные страницы, используя https, но это нормально для меня –

+0

Пэт Джеймс, у меня тоже есть эта проблема. Не могли бы вы поделиться своим исходящим правилом? – StronglyTyped

1

Ваше решение работает, но проблема в том, что ваша вторая инструкция убивает первую инструкцию для любых ссылок не () биллинг/(.), включая ваши 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> 
5

Это сообщение немного старый, но я хотел бы ответить. Я использую ASP.Net MVC3, и ответ Fabio выше не работает для меня. Самое простое решение я придумал, чтобы справиться с 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> 
0

пожалуйста сначала рассмотреть связывание 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> 

если вам нужен эквивалентный GUI IIS в модуле перезаписи см ниже изображения

enter image description here

источник: смотрите tech-net более подробно и шаг за шагом руководства.

+0

также см. Это сообщение https://serverfault.com/q/292374/105675 –