IIS redirect - неверное значение переменной сервера - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь заставить SSL для моего сайта. Но у меня проблема с переменной {HTTPS}, она всегда возвращает 'OFF', даже если я go на веб-сайт через https. вот мой код

<rule name="Demo" stopProcessing="true">
    <match url="(.*)" />
    <conditions trackAllCaptures="true">
    <add input="{HTTPS}" pattern="off" ignoreCase="true"/>
    <add input="{HTTP_HOST}" pattern="^demo\.com$" ignoreCase="true"/>
    </conditions>
    <action type="Redirect" url="https://www.demo.com/{R:0}?c0={C:0}" />
</rule>
  1. Дело 1: go до http://demo.com => https://www.demo.com?c0=off
  2. Дело 2: go до https://demo.com => https://www.demo.com?c0=off
  3. Случай 3: go до http://www.demo.com => http://demo.com (без перенаправления)

1 Ответ

0 голосов
/ 21 января 2020

Я обнаружил, что мой веб-сайт использует веб-ферму (с балансировкой нагрузки), поэтому я должен использовать {HTTP_X_FORWARDED_PROTO} вместо {HTTPS} для обнаружения запроса. Вот мой код, надеюсь, он пригодится другим

<rule name="Force WWW and HTTPS" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" />
        <add input="{HTTP_HOST}" pattern="^(www\.)?demo\.com$" />
    </conditions>
    <action type="Redirect" url="https://www.demo.com/{R:0}" />
</rule>
<rule name="Force WWW on https" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^https$" />
        <add input="{HTTP_HOST}" pattern="^demo.com$" />
    </conditions>
    <action type="Redirect" url="https://www.demo.com/{R:0}" />
</rule>
...