2013-04-11 10 views
5

Kürzlich habe ich eine ASP.net-Site auf ASP.net MVC Site migriert. Früher gab es zwei Hostheader, einen mydomain.com und einen anderen, www.mydomain.com. Mein SEO sagt, dass Sie nur eine URL "www.domain.com" für SEO Vorteil verwenden sollten.ASP.NET MVC-Site: Umleiten Sie alle "nicht WWW" Anfrage an WWW

Ich bin auf der Suche nach einer Option 301 permanente Umleitung alle mydomain.com Anfrage an www.mydomain.com zu tun.

Die Seite ist in IIS6 und entwickelt in ASP.net MVC gehosteten 4.

Antwort

18

Sie können dies tun, aus der Datei 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

Diese ist eine nette Antwort, @Tommy; keine Zeile C# in Sicht. –

+0

Sie müssen IIS7 oder höher verwenden, um das URL Rewrite-Modul zu verwenden. Dies ist der Weg zu gehen, wenn Sie mindestens IIS7 haben, aber es funktioniert nicht für IIS6. – Craig

+0

@Tommy - wäre es besser, das IIS7 URL Rewrite Modul oder das.Net Routing-Funktionalität innerhalb der WebApp ist selbst eine Umleitung zu tun, wenn Sie die Möglichkeit haben, beide zu verwenden? Oder (dritte Option) sollte ich nur auf beides antworten und die URL für beide beibehalten, die einen Reverse Proxy im URL Rewrite Modul verwenden? ... obwohl diese letzte 3. Option nicht ideal für SEO ist, würde ich denken. – johntrepreneur

5

Sie Config oder URL Rewriter in IIS nutzen könnten, aber die beste Methode, die ich gefunden habe, ist nur einige Code in Application_BeginRequest() in Ihrem global.asax.cs wie folgt zu setzen:

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); 
} 

Da Sie dies in Code tun, können Sie haben Sie jede Logik, die Sie benötigen, auf Anfrage.

+0

Ich wurde versucht, Regel in Config in allen Aspekten, aber war nicht erfolgreich in IIS 7. aber diese Lösung funktioniert von mir. Danke vielmals. – CrazyDev

0

(IIS 7 oder höher erforderlich)

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

(ähnlich wie oben Lösung, aber benötigen Sie nicht Ihre eigenen Domain-Namen hinzufügen.)

<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> 

Beachten Sie, dass Sie höchst Wahrscheinlich sehen Sie unter dem Tag verzerrte Linien mit einer Meldung, dass das Tag ungültig ist. Ich habe diese Nachricht bekommen, aber es hat tatsächlich gut funktioniert.

Wenn Sie die Intellisense arbeiten möchten, können Sie dieses Update hier versuchen können ...

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

Mehr Informationen über httpRedirect finden Sie hier ...

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