web-dev-qa-db-fra.com

Réécrire la règle en HTTPS sauf sur localhost

J'utilise la réponse donnée ici comme base pour essayer d'ajouter une règle de réécriture à mon fichier web.config. Je veux qu'il corresponde à toute URL qui ne fonctionne pas sur localhost afin de forcer https.

Voici ce que j'ai en ce moment:

<system.webServer>
  <rewrite> <!-- force https - https://stackoverflow.com/a/15119044/51 -->
    <rules>
      <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
        <match url="^((?!localhost).)*$"/>
        <conditions>
          <add input="{HTTPS}" pattern="^OFF$"/>
        </conditions>
        <action type="Redirect" url="https://{HTTP_Host}/{R:1}" redirectType="SeeOther"/>
      </rule>
    </rules>
  </rewrite>
</system.webServer>

J'essaie d'utiliser un lookaround négatif afin de ne faire correspondre que les URL qui n'incluent pas "localhost" dans l'url. Mais ça ne fonctionne pas.

Alors, comment cette règle doit-elle être configurée afin de ne réécrire que les URL non locales?

35
Yaakov Ellis

Essayez cette condition:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
        <match url="^(.*)$"/>
        <conditions>
          <add input="{HTTPS}" pattern="^OFF$"/>
          <add input="{HTTP_Host}" matchType="Pattern" pattern="^localhost$" negate="true" /> 
        </conditions>
        <action type="Redirect" url="https://{HTTP_Host}/{R:1}" redirectType="SeeOther"/>
      </rule>
    </rules>
  </rewrite>
</system.webServer>

L'utilisation d'une condition negate contre le modèle localhost devrait faire l'affaire.

52
anubhava

En ajoutant à anubhava réponse , vous pouvez remplacer l'élément add pour localhost par les 2 entrées suivantes pour répondre à la fois à localhost et 127.0.0.1 avec des ports facultatifs, par exemple localhost: 59400, ce qui est le cas lors du débogage via Visual Studio. et IIS

<add input="{HTTP_Host}" matchType="Pattern" pattern="^localhost(:\d+)?$" negate="true" />
<add input="{HTTP_Host}" matchType="Pattern" pattern="^127\.0\.0\.1(:\d+)?$" negate="true" />    

Avec la réponse d'origine, localhost: 123 serait redirigé vers https, ce qui n'est peut-être pas souhaitable.

46
Sam Sippe