Esiste un modo semplice per reindirizzare tutti i tentativi di andare a una versione HTTP: // di un sito al suo equivalente HTTPS: //?
Esiste un modo semplice per reindirizzare tutti i tentativi di andare a una versione HTTP: // di un sito al suo equivalente HTTPS: //?
Risposte:
Penso che il modo più pulito sia come descritto qui su IIS-aid.com . È solo web.config e quindi se cambi server non devi ricordare tutti i passaggi che hai passato con la pagina di errore personalizzata 403.4 o altre autorizzazioni speciali, funziona e basta.
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
La soluzione più semplice e pulita che ho trovato è stata
In Impostazioni SSL -> richiede SSL
Nelle pagine di errore -> Errore 403.4 -> Reindirizzamento al sito HTTPS
Nelle pagine di errore -> Modifica impostazioni funzionalità ... -> Imposta errori dettagliati per richieste locali e pagine di errore personalizzate per richiesta remota
Il vantaggio è che non richiede righe di codice aggiuntive. Unico inconveniente è che ti reindirizza a un url assoluto.
Un modo pulito cambia solo lo schema URL da http -> https e lascia tutto il resto equivalente. Dovrebbe essere lato server in modo che non ci siano problemi con il browser.
JPPinto.com ha istruzioni dettagliate su come eseguire questa operazione, tranne per il fatto che usano javascript (HttpRedirect.htm) invece di un reindirizzamento lato server. Per qualche motivo, non sono riuscito a far funzionare IE con JavaScript se hai abilitato "Mostra messaggi di errore HTTP amichevoli", che è attivo per impostazione predefinita. Un'altra cosa con lo script è che il reindirizzamento al percorso non ha funzionato nemmeno in FF o Chrome. Lo script reindirizza sempre a root. (Forse ho perso qualcosa, perché dovrebbe reindirizzare al percorso.)
Per questi motivi ho usato una pagina ASP per il reindirizzamento. Il rovescio della medaglia è ovviamente che ciò richiede che ASP classico sia abilitato sul server.
OpsanBlog ha uno script ASP e istruzioni che funzionano bene con IIS6.
Ho avuto alcuni problemi con questo metodo con IIS7. Principalmente i problemi dell'interfaccia utente, poiché IIS7 rende davvero facile perdere qualcosa.
Il gestore IIS dovrebbe mostrare il nome del file nell'intestazione.
global.asax
protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}
Uso asp classico (intranet) e nelle pagine che richiedono il login il file di accesso include il reindirizzamento:
if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then
Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if
Questo ovviamente non include i dati GET o POST. Quindi in effetti è un reindirizzamento pulito alla tua pagina protetta.