Meilleure façon de rediriger tous les HTTP vers HTTPS dans IIS


26

Nous voulons que TOUS les sites de notre serveur Web (IIS 10) appliquent SSL (c.-à-d. Redirigent HTTP vers HTTPS).

Nous demandons actuellement SSL sur chaque site et mettons en place un 403 errorgestionnaire pour effectuer une 302 redirectà l'adresse https pour ce site spécifique.

Cela fonctionne très bien. Mais c'est difficile à faire pour chaque site, il y a beaucoup de place pour l'erreur humaine.

Idéalement, je voudrais mettre en place un permanent 301 redirectsur tous HTTP://*pourHTTPS://*

Existe-t-il un moyen simple de le faire dans IIS?


Ne pouvez-vous pas écrire un script pour effectuer cette modification pour chaque site, ce qui réduirait à la fois le fardeau administratif et aiderait également à prévenir les fautes de frappe et les erreurs?
Todd Wilcox

1
Le titre est incorrect. Je pense qu'il était destiné à lire "La meilleure façon de rediriger tous les HTTP vers HTTPS dans IIS"
Mick

@ToddWilcox pouvez-vous donner un exemple d'un tel script?
userSteve

N'utilisez pas IIS

Réponses:


40

Le module 2.1 de réécriture d'URL IIS pour IIS7 + peut être votre ami. Le module peut être téléchargé depuis IIS URL Rewrite . L'utilisation du module de réécriture d'URL et de la référence de configuration du module de réécriture d'URL 2.0 explique comment utiliser le module.

Une fois le module installé, vous pouvez créer une redirection à l'échelle de l'hôte à l'aide du Gestionnaire IIS. Sélectionnez Réécriture d'URL , Ajouter des règles ... et Règle vierge .

Nom:
rediriger vers HTTPS

Correspondance URL URL
demandée: Matches the Pattern
Utilisation: Wildcards
Modèle: *
Ignorer la casse: Coché

Conditions
Regroupement logique: Match Any
Entrée de condition : {HTTPS}
Vérifier si la chaîne d'entrée: Matches the Pattern
Modèle: OFF
Ignorer la casse: Cochée
Suivre les groupes de capture dans toutes les conditions: Non cochée

Variables serveur
Laisser vide.

Action
Type d'action: Redirect
URL de redirection: https://{HTTP_HOST}{REQUEST_URI}
Ajouter une chaîne de requête: non cochée
Type de redirection: Permanent (301)

Appliquez la règle et exécutez IISReset (ou cliquez sur Redémarrer dans le gestionnaire IIS)

Alternativement, après avoir installé le module, vous pouvez modifier le fichier applicationHost.config comme suit:

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>

Est-ce que cela fonctionnera pour les redirections 301 permanentes?
userSteve

@userSteve selon la réponse ci-dessus, vous pouvez choisir le type de redirection.
BE77Y

@userSteve whoops, oui, vous devriez pouvoir changer le type de redirection en 301 et obtenir les mêmes résultats
sippybear

1
@sippybear encore une question - que signifie input = "{HTTPS}"? Doit-il s'agir de {HTTP} car ce sera l'entrée et HTTP la sortie?
userSteve

3
{HTTPS} est une variable que vous interrogez pour savoir si la connexion est sécurisée. Vous pouvez en savoir plus à ce sujet ici: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… Dans ce cas, nous vérifions si {HTTPS} est "désactivé", puis redirige si il est
sippybear

1

Ma recherche montre que cela pourrait être un meilleur moyen de rediriger:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>

1
Pouvez-vous expliquer pourquoi c'est mieux?
userSteve

Je suis désolé de ne pas pouvoir l'expliquer moi-même, il suffit de lire à quelques endroits que la syntaxe est meilleure.
Fallen Angel

1
avez-vous des sources?
dangel

1
Il s'agit exactement de la même règle que dans serverfault.com/a/893804/7184 , mais écrite à l'aide d'expressions régulières et du regroupement Match All. Un avantage pourrait être que l'expression de la règle utilise les valeurs par défaut de la règle et qu'elle est terser.
bzlm

Je suis sur IIS 10 et la réponse sélectionnée n'a pas fonctionné pour moi. Pour une raison quelconque, IIS n'a pas reconnu la syntaxe comme une règle valide. J'ai collé votre code et cela a fonctionné immédiatement, merci pour le partage.
Jordan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.