Eu consegui configurar uma regra de regravação para o meu site usando esta resposta :
<rule name="Redirect from non www" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^example.com$" />
</conditions>
<action type="Redirect" url="https://www.example.com/{R:0}" redirectType="Permanent" />
</rule>
<!-- this is the rule I am interested in -->
<rule name="Redirect from non https" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{HTTP_HOST}" pattern="^www.example.com$" />
</conditions>
<action type="Redirect" url="https://www.example.com/{R:0}" redirectType="Permanent" />
</rule>
No entanto, tenho dificuldade em entender como o atributo url da tag action realmente funciona. Se eu for para o IIS - > Reescreva as regras - > Redirecionar de não https - > Padrão de teste - > insira url http://www.example.com/subdir/?param=value e clique em Teste, recebo {R:0} = http://www.example.com/subdir/?param=value .
Isso faz sentido, pois a expressão * regex corresponderá à string inteira.
Pergunta: Como o mecanismo de regravação de URL obtém https://www.example.com/subdir/?param=value em vez de https://www.example.com/http://www.example.com/subdir/?param=value ?