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
и матч только *
.