2013-04-02 13 views
12

Recentemente ho ricevuto un certificato SSL per il mio sito Web e desidero reindirizzare tutto il traffico verso HTTPS. Ho ottenuto tutto per andare a https://mydomain.com ma se qualcuno immette http://mydomain.com/anotherpage, rilascia l'altra pagina e porta semplicemente l'utente alla pagina iniziale.Reindirizzamento relativo da HTTP a HTTPS da IIS

mia regola nel mio file web.config assomiglia a questo:

<rule name="HTTP to HTTPS redirect" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
    <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
    </conditions> 
    <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> 
</rule> 

Ho anche provato https://{HTTP_HOST}{REQUEST_URI} senza alcun successo. Qualcuno può dirmi cosa devo fare per reindirizzare il sito web alla versione HTTPS corretta della pagina? Ho la sensazione che abbia qualcosa a che fare con il modello, ma non riesco a capire la sintassi.

+0

Penso che abbia qualcosa a che fare con il riferimento posteriore. Cosa succede se cambi il pattern in 'url =". * "' E riscrivi in ​​'url =" https: // {HTTP_HOST}/{R: 0} "'? – cheesemacfly

+0

Questo reindirizza ancora tutto alla home page. – user2234612

+0

Questo è davvero strano. Dovrai utilizzare lo strumento [la traccia della richiesta non riuscita] (http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules) per vedere da dove viene il problema. – cheesemacfly

risposta

5

modificarla in:

<rewrite> 
    <rules> 
     <rule name="Redirect 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> 
+2

Qual è il cambiamento chiave qui? 'pattern ="^OFF $ "'? – Zapnologica

12

ho trovato un modo per fare questo, e non è necessario il modulo di riscrittura per esso.
Di seguito ha lavorato per me su Windows 8 (IIS 8.5):

  1. rimuovere l'associazione dal tuo sito HTTP (lasciare HTTPS al posto)
  2. aggiungere un altro sito
  3. Assicurarsi che il nuovo sito ha HTTP vincolanti
  4. Configure HTTP Redirect come mostrato:

enter image description here

ora Al l La richiesta HTTP reindirizzerà al tuo sito HTTPS e conserverà il resto dell'URL.

+0

wow soluzione brillante - se funziona.andando a provarlo. – Riz

+0

fantastico ha funzionato! è stato anche in grado di associare un indirizzo IP per reindirizzare a https! Grazie! – Riz

0

Credo che la risposta di AndyH sia il modo più semplice e migliore. Ho trovato che usare la riscrittura dell'URL può anche entrare in conflitto con il codice che può reindirizzare l'utente a un'altra pagina. L'IT ha comunemente rotto il nostro ambiente. Ma la soluzione di Andy ha funzionato in modo impeccabile. Penso anche che la soluzione di Andy metterà meno overhead sul server in quanto non ha bisogno di esaminare ogni url che lo colpisce per possibili condizioni di riscrittura.

1

Non posso ancora commentare o lascerei questo come commento sotto la risposta di AndyH. La soluzione era corretta, anche se ho ottenuto un ulteriore intoppo (probabilmente legato all'uso del server Coldfusion di Adobe). Volevo condividere qualche ulteriore ricerca che dovevo fare per qualsiasi altra anima sfortunata che potrebbe imbattersi in essa.

Una volta configurato, il reindirizzamento sarebbe sempre fine a questo indirizzo:

https://xxx.xxx.com/jakarta/isapi_redirect.dll 

La correzione per questo è stato trovato in un thread di Adobe (https://forums.adobe.com/thread/1034854): ho dovuto cambiare le impostazioni di un pool di applicazioni come segue:

sito reale (HTTPS vincolante solo, in realtà contiene il codice e le directory virtuali) del pool di applicazioni Impostazioni avanzate: Enable 32-Bit Applications : False

sito Http_Redirect (HTTP solo vincolante, è ab shell lisci di una cartella senza directory) del pool di applicazioni Impostazioni avanzate: Enable 32-Bit Applications : True


EDIT: Un altro particolare, legato a interrogare conservazione stringa:

Per suggerimento in questo post (http://www.developerfusion.com/code/4678/permanent-301-redirect-with-querystring-in-iis/)

Aggiungi $S$Q alla fine del dominio e assicurati che la casella per Redirect all requests to exact destination sia selezionata. Quindi salverà anche la stringa di query.

1

Ho avuto lo stesso problema in cui il R:1 stava lasciando cadere le mie cartelle. L'ho risolto così.

<rule name="http to https" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTPS}" pattern="^OFF$" /> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
      appendQueryString="false" redirectType="SeeOther" /> 
</rule> 
0


ho trovato una soluzione:

considerare ciò che in IIS è consired un sito web: semplicemente un insieme di regole, il percorso in cui ottenere i file e le sue associazioni.

Inoltre, c'è disponibile una funzione denominata "HTTP reindirizzamento" (incluso come standard in IIS), che reindirizzare un host ad un altro, mantenendo tutti sottodirectory (rende un percorso relativo). La soluzione alternativa è di lasciare solo il binding per HTTPS (porta 443) nel tuo sito Web e crearne un altro con il binding su HTTP (porta 80) e impostare per questo un reindirizzamento HTTP al tuo URL con https://.

Ad esempio, prendere in considerazione un sito Web denominato mytest e i relativi URL http://www.mytest.com/ e https://www.mytest.com/. Impostare per esso invece solo vincolante su https://www.mytest.com/ ed eliminare l'associazione http. Quindi creare un nuovo sito Web con lo stesso percorso locale, chiamato mytest http con una sola connessione sulla porta 80 (http://www.mytest.com/) e impostare per questo uno HTTP Redirect a https://www.mytest.com/.
Semplice e pulito, e dovrebbe essere veloce quanto l'url https per l'utente, perché è solo un reindirizzamento interno. Spero che possa funzionare per te!

Problemi correlati