Quando pubblichiamo un sito web su internet, tipicamente registriamo più domini internet (.it, .com, .net, ecc.) in modo da favorire al massimo la possibilità che gli utenti raggiungano le nostre pagine.
Avere un sito che risponde a diversi URL, però, non è indicato da un punto di vista di SEO, in quanto comporta un frazionamento degli hit complessivi tra i vari indirizzi possibili, ed una best practice è quella di fare in modo che tutti questi indirizzi redirigano ad un nome di dominio standard. Questo processo, che prende il nome di URL Canonicalization, può essere implementato facilmente in IIS 7. Vediamo come.
Innanzi tutto, la situazione di partenza sarà simile a quella in figura, in cui cioè abbiamo un Site con in binding un certo numero di host, che comprenderanno i vari domini, magari nelle versioni con e senza "www.". Volendo, possiamo aggiungerne di ulteriori tramite l'opzione Bindings.

Con una simile configurazione, IIS risponde alle chiamate dirette a ognuno di questi domini, mantenendo ovviamente però invariato l'indirizzo visualizzato dal browser. Per risolvere questa problematica, possiamo sfruttare un modulo di IIS denominato URL Redirect Module, che possiamo scaricare e installare automaticamente tramite Web Platform Installer.
La configurazione può essere effettuata sia da IIS Manager che tramite web.config. Nel primo caso basta un doppio click sull'icona URL Rewrite, come in figura, per aprire una maschera tramite cui creare le nostre regole di rewrite.

Da www.testredirect.com a testredirect.com
Una volta aggiunta una nuova Blank rule, dobbiamo specificare innanzitutto quali sono gli URL che dovranno essere presi in considerazione dal modulo nell'applicare la regola. Questo tipo di impostazioni vengono indicate tramite regular expression e, nel nostro caso, utilizzeremo il pattern (.*) per gestire tutti i possibili URL.
Il secondo passo è quello di indicare, all'interno del gruppo Conditions, la condizione per cui la regola dovrà agire. Pertanto, aggiungiamo una nuova condizione da applicare alla componente host dell'URL e che verifichi che non corrisponda a quello canonico (nel nostro esempio "testredirect.com"), indicando quset'ultimo tramite una regex ^testredirect\.com$.

L'ultimo passo è quello di specificare l'azione da intraprendere (sezione Action), che in particolare sarà un Redirect di tipo Permanent verso l'indirizzo indicato in figura.

Il suffisso {R:1} e il flag Append query string fanno in modo che eventuali nomi di file o parametri di query string siano accodati al nuovo indirizzo così generato.
Questa configurazione può essere impostata anche da file web.config nella sezione system.webServer:
<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <rewrite> <rules> <rule name="RedirectRule" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" pattern="^testredirect\.com" negate="true" /> </conditions> <action type="Redirect" url="http://testredirect.com/{R:1}" appendQueryString="false" /> </rule> </rules> </rewrite> </system.webServer>
Da testredirect.com a www.testredirect.com
Per effettuare il redirect inverso, è sufficiente modificare la regular expression e il redirect url nel web.config come nell'esempio in basso.
<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <rewrite> <rules> <rule name="RedirectRule" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" pattern="^www\.testredirect\.com" negate="true" /> </conditions> <action type="Redirect" url="http://www.testredirect.com/{R:1}" appendQueryString="false" /> </rule> </rules> </rewrite> </system.webServer>
Dato che la nostra regola si applica a tutti gli host differenti da quello canonico, il redirect verrà effettuato automaticamente anche per tutte gli altri nomi di dominio (ad es. www.testredirect.net) che abbiamo registrato tra i bindings del Site di IIS.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire gli accessi con Token su Azure Container Registry
Ordine e importanza per @layer in CSS
Utilizzare Azure Cosmos DB con i vettori
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Creare una libreria CSS universale: Immagini
Creare una libreria CSS universale - Rotazione degli elementi
Creare una libreria CSS universale: i bottoni
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Usare il colore CSS per migliorare lo stile della pagina
Cancellare una run di un workflow di GitHub
Change tracking e composition in Entity Framework
Ottimizzare le pull con Artifact Cache di Azure Container Registry