2014-12-23 9 views
7

Ho la seguente regola di riscrittura che funziona perfettamente su un normale progetto asp.net, in esecuzione su IIS7.La regola di riscrittura di Umbraco https causa un ciclo infinito

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

Così una delle nostre pagine quando ha visitato in http://{domain}/aboutus reindirizza al https://{domain}/aboutus. Ora inserire la stessa regola di riscrittura in un sito Umbraco causa un ciclo infinito. Non abbiamo altre regole di riscrittura per il nostro sito Umbraco. Questo mi porta a pensare che Umbraco stia in qualche modo dirottando il routing da http a https e causi il loop infinito. Cosa ci manca?

+0

Quale versione di Umbraco stai usando? – PTuckley

+0

Ciao PTuckey, è 7.1.4 –

risposta

1

mi consiglia di utilizzare la seguente regola invece:

<rule name="Redirect to https" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
      redirectType="Permanent" appendQueryString="false" /> 
</rule> 
+0

Ho visto che hai risposto a questo in un altro thread e in realtà ho provato questo e questo non funziona. Ancora una volta, la regola di riscrittura funziona già in un normale sito Web asp.net ma non con un sito Umbraco. –

+0

Ho assegnato il premio a questa risposta in quanto questo è risultato il più vicino alla soluzione di cui ho bisogno. Ho provato questo, insieme alla riscrittura nella mia domanda, ed entrambi hanno lavorato ad una nuova installazione di Umbraco. Tuttavia, il mio problema rimane ancora. –

+0

Se hai bisogno di ulteriore aiuto dovresti farmi sapere cosa "non funziona" :) Umbraco non esegue altri reindirizzamenti da solo e sto usando questa regola di riscrittura con successo. Penso che sia necessario NON avere alcuna riscrittura in urlRewriting.config e questa dovrebbe essere la prima regola di riscrittura nel proprio file web.config (poiché smette di elaborare dopo). our.umbraco.org è un posto migliore per discutere. – sebastiaan

2

Come la vostra espressione regolare per l'URL non è filtra l'ingresso (<match url="(.*)" />), è necessario utilizzare redirectType="Permanent" parametri nel codice:

Ulteriori informazioni possono essere trovate qui:
Add an Url Rewrite rule

Una cosa da notare è che di default la ri-indirizza sono 302 ri-dirige, se si vuole fare 301 reindirizza è necessario aggiungere il seguente:
redirectMode="Permanent"
è possibile trovare le istruzioni complete per l'URL componente ri-scrittura sul loro sito web: https://github.com/aspnetde/UrlRewritingNet

+0

Ho provato diversi redirectType prima di pubblicare la mia domanda e non aiuta. Ancora una volta, la regola di riscrittura funziona già in un normale sito Web asp.net ma non con un sito Umbraco. Quindi la regola di riscrittura deve essere corretta, giusto? Quindi deve essere con una configurazione in Umbraco? –

1

una possibile soluzione è quella di utilizzare il modulo riscrittura Umbraco piuttosto che una riscrittura di IIS.

nel file di configurazione riscrittura degli URL (Config/UrlRewriting.config), la seguente regola è un semplice esempio di come reindirizzare da HTTP a HTTPS:

<add name="https Rewrite" 
    redirect="Domain" 
    redirectMode="Permanent" 
    virtualUrl="http://(.*)" 
    destinationUrl="https://$1" 
    ignoreCase="true" /> 

Questa regola deve essere collocato all'interno della sezione <rewrites>.

Modifica: come da commento di sebastiaan, il modulo urlRewriting.net è obsoleto e una soluzione IIS dovrebbe essere utilizzata laddove possibile.

+1

Sfortunatamente il modulo urlRewriting.net è molto vecchio e piuttosto schifoso. Lo manteniamo solo perché alcune persone non possono installare il plug-in di riscrittura IIS. Consiglierei sempre di usare IIS se possibile. – sebastiaan

+1

@sebastiaan Non ne ero a conoscenza - aggiornerò la mia risposta. Grazie. – PTuckley

0

Ho anche avuto problemi con infiniti cicli di reindirizzamento con Umbraco 6.2.4. Si stava verificando casualmente ogni settimana o giù di lì. Il mio sito è tutto SSL, con UmbracoUseSSL = false.

mio HTTP ad HTTPS regole è stato il seguente:

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

ho aggiornato al seguente per @sebastiaan

<rule name="Redirect to https" stopProcessing="true"> 
<match url="(.*)" /> 
<conditions> 
    <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
</conditions> 
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
     redirectType="Permanent" appendQueryString="false" /> 

Suona come dal R: 1 può contiene una stringa vuota, ha il potenziale per causare loop.{REQUEST_URI} conterrà sempre almeno una barra. Non sono sicuro se questo è il motivo per cui @sebastiaan consiglia il secondo?

Se il problema persiste, segnalerò. Speriamo che la regola aggiornata risolva il problema.

Problemi correlati