30 messaggi dal 27 marzo 2002
Buongiorno a tutti.

Premetto che con aspnet sono alle prime armi e molto mi è sconosciuto.

Il mio sito necessita di un redirect imposto da HTTP ad HTTPS su tutte le pagine. E, fin qui, tutto ok.
<rewrite>
   <rules>
     <rule name="HTTP TO HTTPS" stopProcessing="true">
       <match url="(.*)" ignoreCase="false" />
        <conditions logicalGrouping="MatchAny">
         <add input="{HTTP_HOST}" pattern="^(www.)?miosito.it$" />
        </conditions>
    <action type="Redirect" url="https://miosito-it.securesslhosting.it/{R:1}" redirectType="Found" />
     </rule>
   </rules>
</rewrite>

Tuttavia le pagine presenti nella cartella TASK (presente in radice) devono forzatamente essere eseguite in HTTP semplice per questioni di configurazione del server. Ho fatto diverse prove (scartabellando in rete e adattando codici simili) tra le quali:
<rewrite>
   <rules>
     <rule name="HTTP TO HTTPS" stopProcessing="true">
       <match url="(.*)" ignoreCase="false" />
        <conditions logicalGrouping="MatchAny">
         <add input="{HTTP_HOST}" pattern="^(www.)?miosito.it$" />
         <add input="{URL}" pattern="^/TASK/cal_notifica-task.asp" ignoreCase="true"/>
        </conditions>
    <action type="Redirect" url="https://miosito-it.securesslhosting.it/{R:1}" redirectType="Found" />
     </rule>
   </rules>
</rewrite>

Riscontrando sempre i seguenti risultati:
1) un messaggio di re-indirizzamento non corretto (come l'es. qui sopra)
2) la clausola totalizzante del match (anche creando una seconda istanza di roule) prende il sopravvento e spara tutto sotto HTTPS.

Qualcuno può aiutarmi e dirmi dove sbaglio?

Grazie
Luca
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Luca,
se ho capito bene, vuoi che tutto il traffico (tranne quello diretto alla sottocartella TASK) sia reindirizzato verso HTTPS.

In questo caso, ti serve un'espressione regolare che corrisponda ad ogni URL che non inizi con TASK/
Lo puoi fare con il negative lookahead. In pratica dobbiamo assicurarci che l'inizio della stringa non sia seguito dalla sequenza TASK/
^(?!TASK/)


Dunque prova con questa regola

<rules>
<rule name="HTTP TO HTTPS" stopProcessing="true">
<match url="^(?!TASK/).*$" ignoreCase="true" />
<conditions logicalGrouping="MatchAny">
<add input="{SERVER_PORT_SECURE}" pattern="^0$" />
</conditions>
<action type="Redirect" url="https://miosito-it.securesslhosting.it/{R:0}" redirectType="Permanent" />
</rule>
</rules>

Ho sostituito anche la tua condition su {HTTP_HOST} con una che invece controlla il contenuto di {SERVER_PORT_SECURE}. Se è 0, allora vuol dire che la richiesta era rivolta ad HTTP, e perciò va ridirezionata.

ciao,
Moreno

Enjoy learning and just keep making
30 messaggi dal 27 marzo 2002
Grazie infinite Moreno

Ora funziona, tuttavia ho dovuto ripristinare il mio {HTTP_HOST} al posto del {SERVER_PORT_SECURE} perché mi dava un errore di re-indirizzamento.

Infatti nonostante ci si trovi sotto HTTPS i valori delle ServerVariables corrispondono comunque a quelle HTTP.
Request.ServerVariables("HTTPS")= Off
Request.ServerVariables("SERVER_PORT_SECURE") = 0
Request.ServerVariables("SERVER_PORT") = 80

La cosa è strana e i sistemisti del provider hosting (Register) non mi hanno dato una risposta chiara in merito. Parlano di Server Sicuro su dominio condiviso, insomma parole per non dire niente. Ma hanno comunque garantito che il traffico rimane protetto.

Grazie ancora.
Buona giornata
Luca

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.