Il modo migliore per reindirizzare tutto da HTTP a HTTPS in IIS


26

Vogliamo che TUTTI i siti sul nostro server web (IIS 10) applichino SSL (ovvero reindirizzamento da HTTP a HTTPS).

Attualmente stiamo "richiedendo SSL" su ciascun sito e configurando un 403 errorgestore per eseguire un 302 redirectindirizzo https per quel sito specifico.

Funziona benissimo. Ma è un dolore da fare per ogni singolo sito, c'è molto spazio per l'errore umano.

Idealmente mi piacerebbe istituire un permanente 301 redirectsu tutti HTTP://*aHTTPS://*

C'è un modo semplice per farlo in IIS?


Non puoi scrivere uno script per apportare questa modifica per ogni sito che ridurrebbe sia l'onere amministrativo sia anche per prevenire errori di battitura ed errori?
Todd Wilcox,

1
Il titolo non è corretto Penso che fosse destinato a leggere "Il modo migliore per reindirizzare tutto HTTP a HTTPS in IIS"
Mick

@ToddWilcox puoi fare un esempio di tale sceneggiatura?
userSteve

Non usare IIS

Risposte:


40

L'URL IIS Rewrite Module 2.1 per IIS7 + potrebbe essere tuo amico. Il modulo può essere scaricato da IIS URL Rewrite . L'uso del Modulo di riscrittura URL e del Riferimento di configurazione del Modulo 2.0 URL Rewrite spiegano come utilizzare il modulo.

Una volta installato il modulo, è possibile creare un reindirizzamento a livello di host utilizzando Gestione IIS. Seleziona Riscrivi URL , Aggiungi regola / e ... e Regola vuota .

Nome:
reindirizzare a HTTPS

Partita URL
URL richiesto: Matches the Pattern
Usando: Wildcards
Pattern: *
Ignorare caso: Controllato

Condizioni
raggruppamento logico: Match Any
Ingresso Condizione : {HTTPS}
Controlla se l'ingresso stringa: Matches the Pattern
Pattern: OFF
ignorare lettere maiuscole: Controllato
pista gruppi di cattura attraverso condizioni: Non verificata

Variabili del server
Lasciare vuoto.

Azione
Tipo di azione: Redirect
URL di reindirizzamento: https://{HTTP_HOST}{REQUEST_URI}
Aggiungi stringa di query: Non selezionato
Tipo di reindirizzamento: Permanent (301)

Applicare la regola ed eseguire IISReset (o fare clic su Riavvia in Gestione IIS)

In alternativa, dopo aver installato il modulo è possibile modificare il file applicationHost.config come segue:

<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>

Funzionerà per reindirizzamenti permanenti 301?
userSteve

@utenteSteve secondo la risposta sopra, è possibile scegliere il tipo di reindirizzamento.
BE77Y,

@userSteve whoops, sì, dovresti essere in grado di cambiare il tipo di reindirizzamento a 301 e ottenere gli stessi risultati
sippybear,

1
@sippybear un'altra domanda: cosa significa input = "{HTTPS}"? Dovrebbe essere {HTTP} in quanto sarà l'input e HTTP l'output?
userSteve

3
{HTTPS} è una variabile che richiedi per sapere se la connessione è protetta. Puoi leggere ulteriori informazioni qui: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… In questo caso, stiamo verificando se {HTTPS} è "off", quindi reindirizzando se è
sippybear il

1

La mia ricerca mostra che questo potrebbe essere un modo migliore per il reindirizzamento:

<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
Puoi spiegare perché questo è meglio?
userSteve

Mi dispiace di non poterlo spiegare da solo, basta leggere in pochi punti che la sintassi è migliore.
Fallen Angel,

1
hai qualche fonte?
dangel,

1
Questa è esattamente la stessa regola di serverfault.com/a/893804/7184 , ma scritta usando espressioni regolari e raggruppa tutti i gruppi. Un aspetto positivo potrebbe essere che l'espressione della regola utilizza le impostazioni predefinite delle regole ed è più terser.
bzlm,

Sono su IIS 10 e la risposta selezionata non ha funzionato per me. Per qualche motivo IIS non ha riconosciuto la sintassi come una regola valida. Ho inserito il tuo codice e ha funzionato immediatamente, grazie per la condivisione.
Giordania,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.