Я обнаружил, что мой веб-сайт использует веб-ферму (с балансировкой нагрузки), поэтому я должен использовать {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>