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
?