http для https переписать слишком много циклов перенаправления IIS 7

У меня есть приложение, которое я разместил в IIS 7.0. Где я должен убедиться, что он работает только на HTTPS, а не на HTTP поэтому я включил ниже правило в свою корневую конфигурацию.

<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> 

после добавления этого правила, когда я пытался получить доступ к моей заявке, я получаю ниже ошибки:

страница привела к слишком большому количеству перенаправлений. Очистить cookies для этот сайт или разрешение сторонних файлов cookie может устранить проблему. Если нет, возможно, это конфигурация сервера проблема и не проблема с ваш компьютер. Вот некоторые предложения: перезагрузите эту веб-страницу позже. Подробнее об этой проблеме.

5 ответов


положите под условие входного сигнала:

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

вместо:

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

мы имеем наше ASP.NET приложение размещено на AWS с эластичной балансировкой нагрузки, и правило в вопросе с принятым ответом не сработало для нас, и продолжало вызывать бесконечные перенаправления.

это правило, которое, наконец, сработало для нас:

<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>

также, Как упоминалось SNag, у нас был сайт, который сидит за ELB на Amazon. Попытка применить правило перезаписи без следующего входного заголовка вызывала бесконечное перенаправление. Это, по-видимому, является результатом необходимости ввода типа HTTP_X_FORWARDED_PROTO, как показано ниже:<add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" />.

из документации AWS " ваше приложение или веб-сайт могут использовать протокол, хранящийся в заголовке запроса X-Forwarded-Proto, для отображения ответа, который перенаправляет на соответствующий URL-адрес."Мы используем ELB с DNS-записями для пересылки на сервер с сайтом на нем.


мой случай, мне нужно было поставить так:

<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>


для IIS 10 (Windows Server 2016) я следовал инструкциям из здесь которые генерируют немного другую конфигурацию XML для перезаписи:

<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>

модель off и матч только *.