Se vi siete imbattuti in questo articolo, molto probabilmente significa che state cercando di trovare il modo di utilizzare le funzionalità di rewrite/redirect di IIS per reindirizzare tutte le richieste HTTP che arrivano sul vostro sito web su HTTPS SSL; visto che siete qui, daremo anche per scontato che stiate realizzando questo redirect con lo strumento IIS URL Rewrite (nel caso non sappiate cosa sia o se avete bisogno di aiuto per installarlo, date un'occhiata a quest'altro post).
Per farla breve, ecco la regola di rewrite che probabilmente state cercando:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<system.webServer> <rewrite> <rules> <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" /> </rule> </rules> </rewrite> </system.webServer> |
Ora, cosa bisogna fare se volessimo escludere da questo redirect globale una o più cartelle (e tutto il loro contenuto), continuando a renderle accessibili tramite HTTP?
Ecco un bel modo per creare un'eccezione alla regola di cui sopra aggiungendo una sola riga aggiuntiva:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<system.webServer> <rewrite> <rules> <rule name="Redirect to HTTPS except /nossl/ folder" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{REQUEST_URI}" pattern="^nossl/.*" negate="true" /> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" /> </rule> </rules> </rewrite> </system.webServer> |
Come si può vedere, abbiamo sfruttato l'attributo negate="true" per creare un elemento input "escludente", ovvero che escluda dalla regola gli indirizzi che risultino positivi alla RegEx inserita: di conseguenza, nell'esempio di cui sopra, tutte le pagine incluse nella cartella /nossl/ continueranno ad essere accessibili tramite HTTP, senza che vi sia alcun redirect HTTPS / SSL. Inutile dire che è possibile aggiungere più elementi input al fine di escludere altre cartelle dal reindirizzamento obbligatorio HTTP-to-HTTPS.
Per maggiori informazioni, consigliamo di dare un'occhiata alle seguenti risorse online che spiegano il funzionamento dello strumento IIS URL Rewrite di Microsoft:
- Using URL Rewrite Module 2.0 (documentazione, guide, tutorial ed esempi)
- URL Rewrite Module - Video Walkthrough
- URL Rewrite Module - Community Forum
- URL Rewrite Module - Download Page
Per il momento è tutto: spero che questi due esempi possano essere d'aiuto ai tanti amministratori di sistema che si scontrano con questo tipo di problematiche.
Alla prossima!