web-dev-qa-db-fra.com

http à https réécrire trop de boucles de redirection IIS 7

J'ai une application hébergée dans IIS 7.0 . Où je dois m'assurer qu'elle ne fonctionne que sur HTTPS et non sur HTTP J'ai également inclus la règle ci-dessous dans ma configuration racine.

<rewrite>
        <rules>
            <rule name="HTTP to HTTPS redirect" stopProcessing="true">
              <match url="(.*)" />
              <conditions>
                <add input="{HTTPS}" pattern="off" />
              </conditions>
              <action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}"   redirectType="Found" />
            </rule>
        </rules>
</rewrite> 

Après avoir ajouté cette règle lorsque j'ai essayé d'accéder à mon application, l'erreur ci-dessous apparaît:

Cette page a généré trop de redirections. Effacer les cookies pour ce site ou en autorisant des cookies tiers peut résoudre le problème. Si non, il s’agit peut-être d’un problème de configuration du serveur et non d’un problème avec ton ordinateur. Voici quelques suggestions: Rechargez cette page Web plus tard . En savoir plus sur ce problème.

12
Prashant Mohite

Mettre en dessous de la condition d'entrée:

<add input="{HTTPS}" pattern="on" /> 

Au lieu de:

<add input="{HTTPS}" pattern="off" />
17
Gparmar

Notre application ASP.NET est hébergée sur AWS avec Elastic Load Balancing et la règle de la question avec la réponse acceptée ne fonctionne pas pour nous et continue de provoquer des redirections infinies.

C'est la règle qui a finalement fonctionné pour nous:

<rewrite>
   <rules>
      <rule name="HTTPS Rule behind AWS Elastic Load Balancer Rule" stopProcessing="true">
         <match url="^(.*)$" ignoreCase="false" />
         <conditions>
            <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" />
         </conditions>
         <action type="Redirect" url="https://{SERVER_NAME}{URL}" redirectType="Found" />
      </rule>
   </rules>
</rewrite>
6
SNag

Mon cas, je devais mettre comme ça:

<rewrite>
<rules>
    <rule name="HTTP to HTTPS redirect" stopProcessing="true">
      <match url="(.*)" ignoreCase="false" />
      <conditions logicalGrouping="MatchAny">
        <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" />
        <add input="{HTTPS}" pattern="on" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}"   redirectType="Found" />
    </rule>
</rules>

3
Junior Grão

Pour IIS 10 (Windows Server 2016), j'ai suivi les instructions de ici qui génèrent une configuration XML légèrement différente pour la réécriture:

<rewrite>
    <rules>
        <rule name="HTTP 2 HTTPS" patternSyntax="Wildcard" stopProcessing="true">
            <match url="*" />
            <conditions logicalGrouping="MatchAny">
                <add input="{HTTPS}" pattern="off" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}" redirectType="Found" />
        </rule>
    </rules>
</rewrite>

Le modèle est off et la correspondance est uniquement *

1
Alexei

De plus, comme l'a mentionné SNag, nous avions un site situé derrière un ELB sur Amazon. Tenter d'appliquer une règle de réécriture sans l'en-tête de saisie suivant provoquait des redirections infinies. Cela semble résulter de la nécessité d'utiliser le type d'entrée HTTP_X_FORWARDED_PROTO, comme dans l'exemple suivant: <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" />

D'après la documentation AWS, "Votre application ou votre site Web peut utiliser le protocole stocké dans l'en-tête de demande X-Forwarded-Proto pour générer une réponse redirigeant vers l'URL appropriée." Nous utilisons le ELB avec des entrées DNS pour transférer au serveur avec le site sur celui-ci. 

0
nshouppuohsn