URL Rewrite è un modulo aggiuntivo di IIS per poter creare facilmente regole per definire il comportamento di riscrittura degli URL in base a intestazioni HTTP, intestazioni di richiesta o risposta HTTP, variabili del server IIS e persino complesse regole programmatiche, analogamente a quello che fa mod_rewite di Apache.
Inoltre, gli amministratori Web possono eseguire reindirizzamenti, inviare risposte personalizzate o interrompere le richieste HTTP in base alla logica espressa nelle regole di riscrittura.
URL Rewite per esempio è stato usato dagli script di mitigazione di Microsoft riguardo alle Vulnerabilià di Exchange di Marzo 2021 per bloccare le chiamate con particolari cookies passati a IIS.
Di default non è installato in IIS, qundi è necessario aggiungerlo manualmente.
Per le versioni IIS 7, IIS 7.5, IIS 8, IIS 8.5, IIS 10 è necessario il modulo 2.x, repertibile qui:
https://www.iis.net/downloads/microsoft/url-rewrite
per le vecchie versione di IIS 5 e IIS 6 è necessario un modulo ti terze parti, ne elenco alcuni qui sotto:
https://archive.codeplex.com/?p=iirf
http://www.isapirewrite.com/
Ora vediamo come installare il modulo URL Rewrite 2.1 in Windows Server 2019 (IIS 10).
Per velocità utilizzeremo il sito web di default per creare una semplice regola rewrite, ora il modulo non è installato infatti non compare tra le icone di IIS.
A questo punto scarichiamo eseguibile dal link sovrastante e installiamo il componente.
Ora rientrando nel pannello della homepage verrà visualizzato icona URL rewrite
Ora creeremo una semplice regola per reindirizzare le chiamate con protocollo non cifrato http in https, per fare ciò ho configurato che il sito di default, risponda sia in http che in https, configurando il binding.
A questo punto il sito risponderà sia in http che in https.
Quindi accediamo al menu del modulo URL Rewrite
Clicchiamo Aggiungi regola/e
Quindi generiamo una nuova Regola vuota
Verrà mostrato un form con diversi parametri da compilare, inseriamo il nome della regola e il pattern (.*), selezioniamo Ignora maiuscole/minuscole
Ora andiamo ad aggiungere le condizioni, clicchiamo Aggiungi
Inseriamo {HTTPS} nelle codizioni di Input e ^OFF$ come pattern, selezioniamo ignora maiuscole/minuscole
Dopo aver salvato dovrebbe visualizzare la condizione appena creata
Ora impostiamo l’azione da dare alla regola, settiamo il tipo di azione in Reindirizza e la propietà dell’azione https://{HTTP_HOST}{REQUEST_URI}.
In questo caso verrà preso intero url compreso di parametri query string e reindirizzato in https.
Quindi per completare salviamo la configurazione
Ora navigando il sito in http (http://localhost) la chiamata verrò dirottata automaticamente in https (https://localhost), inoltre nel caso dovessero esserci dei parametri querystring verranno riportati nell’url.
Il configuratore che abbiamo usato in IIS in realtà non fa altro che generare un file web.config nella root del sito.
Possiamo verificare la configurazione aprendo il file appena generato.
E’ possibile anche creare lo stesso file nella root direcotory senza utilizzare i pannelli di configurazione, la cosa importante che che sia installato il module URL Rewrite altimenti verranno generati degli errori con impossibiltà di visualizzare il sito.
Qui sotto il contenuto del file web.config nel caso si volesse procedere senza utilizzare il configuratore del modulo.
<configuration> <system.webServer> <rewrite> <rules> <rule name="HTTPS force" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="^OFF$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer> </configuration>