web-dev-qa-db-fra.com

Réécriture d'URL de https: // vers http: // dans IIS7

J'essaie de réécrire les URL du formulaire:

https://example.com/about

au formulaire

http://example.com/about

en utilisant réécriture d'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>

Je suis à perte; J'ai parcouru le Web pour des exemples et essayé toutes les syntaxes auxquelles je peux penser. Les règles de réécriture que je spécifie ne semblent tout simplement pas fonctionner du tout pour toute demande https, comme si tous les https:// les requêtes sont complètement invisibles pour le moteur de réécriture.

les règles fonctionnent bien; voir la réponse ci-dessous.

35
Jeff Atwood

Il s'avère que j'avais le port: 443 lié à un autre site Web!

Les règles de réécriture ci-dessus fonctionnent bien pour la réécriture http: // vers https: // et vice-versa - bien qu'il puisse y avoir des moyens plus optimaux ou plus simples de le faire.

Laissant cette question ici aux futurs voyageurs, car je n'ai pas vu beaucoup de bons exemples du scénario de réécriture https: // vers http: // sur le Web.

26
Jeff Atwood

Ce post est un peu ancien, mais je voulais répondre. J'utilise ASP.Net MVC3, et la réponse de Fabio ci-dessus n'a pas fonctionné pour moi. La solution la plus simple que j'ai trouvée pour gérer la redirection https vers http, tout en permettant aux pages https valides de demander un contenu sécurisé était simplement d'ajouter des règles de liste blanche au-dessus de mes redirections 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>
5
Ben

veuillez d'abord considérer la liaison https à votre site Web pour faire fonctionner le module de redirection ci-dessous est essentiel (alors liez votre application Web avec un certificat auto-signé ou valide )

dernière partie de web.config pour rediriger https vers 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>

si vous avez besoin de l'équivalent IIS GUI dans le module de réécriture voir l'image ci-dessous

enter image description here

source: look tech-net pour plus de détails et un guide étape par étape.

3
Iman Abidi

Votre solution fonctionne, mais le problème est: votre deuxième instruction tue la première instruction pour tous les liens n'est pas (.) facturation /(.), y compris vos css, js et images.

Vous pouvez utiliser cette règle https vers 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>
2
Fabio