J'ai lu un certain nombre de messages ici sur SO ainsi que sur le net (blogs IIS, etc.). J'essaie de forcer toutes les connexions allant de domain.com à www.domain.com et en même temps forcer la demande de HTTP à HTTPS .
J'utilise cet ensemble de règles et de réécritures, mais la seule chose qui se passe, c'est que la redirection est correcte, mais pas vers SSL.
<!-- Redirect to HTTPS -->
<rewrite>
<rules>
<rule name="Redirect to www" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="false">
<add input="{HTTP_Host}" matchType="Pattern" pattern="^mydomain.com$" ignoreCase="true" negate="false" />
</conditions>
<action type="Redirect" url="{MapProtocol:{HTTPS}}://www.mydomain.com/{R:1}" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="MapProtocol" defaultValue="http">
<add key="on" value="https" />
<add key="off" value="http" />
</rewriteMap>
</rewriteMaps>
</rewrite>
Qu'est-ce que je fais mal?
Référence du blog principal: http://weblogs.asp.net/owscott/url-rewrite-protocol-http-https-in-the-action et this SO post - web. config redirection non-www vers www
Edit: J'ai donc trouvé cet article de blog: http://www.meltedbutter.net/wp/?p=231 et j'ai essayé et le tour est joué! Travaillé comme un charme. Je ne sais pas pourquoi cela a fonctionné par rapport aux règles affichées ci-dessus, mais dans mon cas, le ci-dessous fonctionne et prend avec succès tout le trafic non www et le redirige vers les deux www et https .
<!-- Redirect to HTTPS -->
<rewrite>
<rules>
<rule name="http to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://www.domain.com/{R:1}" redirectType="SeeOther" />
</rule>
</rules>
</rewrite>
Nous avons rencontré le même problème lors de la redirection de http à https à l'aide du module URL Rewrite, mais après la désactivation du module require ssl dans IIS, le tour est joué.
C'est un long plan dans certains cas, mais j'avais supprimé mes liaisons de port 80 pour le site Web car je ne voulais que SSL/port 443. Donc, d'après ce que je peux dire, la liaison de port 80 est également nécessaire pour que la réécriture fonctionne correctement.