2013-04-11 12 views
5

Recentemente ho migrato un sito ASP.net al sito MVC di ASP.net. In precedenza c'erano due intestazioni host uno su mydomain.com e un altro su www.mydomain.com. Il mio SEO dice che dovresti usare solo un URL "www.domain.com" per il vantaggio SEO.Sito ASPC MVC: reindirizzare tutta la richiesta "non WWW" al WWW

Sto cercando un'opzione per fare reindirizzamento permanente 301 tutte le richieste mydomain.com a www.mydomain.com.

Il sito è ospitato in IIS6 e sviluppato in ASP.net MVC 4.

risposta

0

Sfortunatamente, il modulo di riscrittura dell'URL non funziona con IIS6 (solo IIS7 o versioni successive). Hai pensato di creare il tuo HttpModule, qualcosa di simile a questo?

IIS 6 how to redirect from http://example.com/* to http://www.example.com/*

Oppure si potrebbe potenzialmente utilizzare una soluzione di terze parti come uno di loro:

http://iirf.codeplex.com/

http://www.urlrewriting.net/149/en/home.html

http://www.isapirewrite.com/

http://urlrewriter.net/

18

È possibile farlo dal file web.config

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="Redirect to WWW" stopProcessing="true"> 
      <match url=".*" /> 
      <conditions> 
       <add input="{HTTP_HOST}" pattern="^example.com$" /> 
      </conditions> 
      <action type="Redirect" url="http://www.example.com/{R:0}" 
       redirectType="Permanent" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 
+0

Questo è una bella risposta, @ Tommy; non una linea di C# in vista. –

+0

Per utilizzare il modulo Riscrivi URL, è necessario utilizzare IIS7 o versioni successive. Questa è la strada da percorrere se hai almeno IIS7, ma non funzionerà con IIS6. – Craig

+0

@Tommy: sarebbe meglio utilizzare il modulo di riscrittura dell'URL IIS7 o il.Funzionalità di routing di rete all'interno della webApp è possibile effettuare un reindirizzamento se si ha la possibilità di utilizzare entrambi? Oppure (terza opzione) dovrei semplicemente rispondere a entrambi e mantenere l'URL per entrambi utilizzando un proxy inverso nel modulo Riscrivi URL? ... anche se quest'ultima opzione non è l'ideale per il SEO, penserei. – johntrepreneur

5

Si potrebbe utilizzare config o URL masterizzatore in IIS, ma il metodo migliore che ho trovato è solo quello di mettere un po 'di codice in Application_BeginRequest() nel vostro global.asax.cs come questo:

var HOST = "www.mydomain.com"; 

if (!Request.ServerVariables[ "HTTP_HOST" ].Equals(
    HOST, 
    StringComparison.InvariantCultureIgnoreCase) 
) 
{ 
    Response.RedirectPermanent(
    (HttpContext.Current.Request.IsSecureConnection ? "https://" : "http://") 
    + HOST 
    + HttpContext.Current.Request.RawUrl); 
} 

Perché stai facendo questo nel codice, è possibile avere la logica necessaria per ogni singola richiesta.

+0

è stata provata la regola in config in tutti gli aspetti ma non è riuscita in IIS 7. ma questa soluzione funziona da me. Molte grazie. – CrazyDev

0

(IIS 7 o superiore richiesto)

da http://www.codeproject.com/Articles/87759/Redirecting-to-WWW-on-ASP-NET-and-IIS

(Simile a soluzione di cui sopra, ma non che sia necessario aggiungere il proprio nome di dominio.)

<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <clear /> 
       <rule name="WWW Rewrite" enabled="true"> 
        <match url="(.*)" /> 
        <conditions> 
         <add input="{HTTP_HOST}" negate="true" 
          pattern="^www\.([.a-zA-Z0-9]+)$" /> 
        </conditions> 
        <action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}" 
         appendQueryString="true" redirectType="Permanent" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

Si noti che è più probabilmente vedi linee ondulate sotto il tag con un messaggio che il tag non è valido. Ho ricevuto questo messaggio ma, in effetti, ha funzionato bene.

Se si desidera che l'intellisense al lavoro, si può provare questo aggiornamento qui ...

http://ruslany.net/2009/08/visual-studio-xml-intellisense-for-url-rewrite-1-1/

Maggiori informazioni su httpRedirect può essere trovato qui ...

http://www.iis.net/configreference/system.webserver/httpredirect