Impostare la canonizzazione degli URL in IIS 7 con URL Rewrite Module

di Marco De Sanctis, in ASP.NET 3.5, ASP.NET 4.0, ASP.NET MVC,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi