2010-06-21 4 views
16

Ich habe eine azur Website, die benannt ist:Best Practice für HTTP-Umleitung für Windows Azure

  • http://myapp.cloudapp.net

Of-Kurs diese URL ist ein bisschen hässlich, damit ich set up a CNAME die http://www.myapp.com auf die Punkte azurblaue URL.

Alles ist gut bis hier, aber es gibt einen Haken.

http://myapp.cloudapp.net ist durchgesickert und wird jetzt von Google indiziert und lebt auf anderen Seiten.

würde ich bei www.myapp.com

alle Anfragen für myapp.cloudapp.net an die neue Heimat permanent gerne umleiten Die Website Ich habe 2.0 in MVC.Net codiert, da dies ein azur App Es gibt keine Benutzeroberfläche für den Zugriff auf IIS und alles muss im Anwendungscode oder web.config erledigt werden.

Was ist ein sauberer Weg, um eine dauerhafte Umleitung in Position zu setzen, sollte es in web.config oder in einem globalen Controller gehen?

Antwort

17

Sie können stattdessen das IIS-Rewrite-Modul verwenden (scheint "sauberer"). Hier ist ein Blogbeitrag, der zeigt, wie man das macht: http://weblogs.asp.net/owscott/archive/2009/11/30/iis-url-rewrite-redirect-multiple-domain-names-to-one.aspx. (Sie müssen nur das entsprechende Markup in web.config setzen.)

Ein Beispiel ausschließen könnten Sie ist:

<rule name="cloudexchange" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions> 
      <add input="{HTTP_HOST}" pattern="cloudexchange.cloudapp.net" /> 
     </conditions> 
     <action type="Redirect" url="http://odata.stackexchange.com/{R:0}" /> 
    </rule> 
+0

URL Rewrite 2.0 ist auf allen Windows Azure-VMs installiert. (2.0 ist in OS 1.3 und höher verfügbar.) – smarx

+0

Yerp gerade herausgefunden hier: http://msdn.microsoft.com/en-us/library/dd573358.aspx Ich akzeptiere diese Antwort, weil es etwas sauberer, nicht habe meinen Code zu vergießen –

+3

Es ist 4 Jahre später; Ist das immer noch der einzige Weg dies zu tun? Ich liebe Azure, aber die Umleitung ist irgendwie nervig; d. h. müssen DNS verwenden, um www zu nicht-www umzuleiten; muss dies implementieren, um * .azurewebsites.net an die benutzerdefinierte Domain umzuleiten. Dies sollte Standardmaterial sein, das in den Site-Konfigurationseinstellungen ein Kontrollkästchen haben sollte. – kamranicus

5

Das ist, was ich tat:

Wir haben eine Basis-Controller-Klasse haben wir für alle unsere Controller verwenden wir jetzt außer Kraft setzen:

protected override void OnActionExecuted(ActionExecutedContext filterContext) { 

     var host = filterContext.HttpContext.Request.Headers["Host"]; 

     if (host != null && host.StartsWith("cloudexchange.cloudapp.net")) { 
      filterContext.Result = new RedirectPermanentResult("http://odata.stackexchange.com" + filterContext.HttpContext.Request.RawUrl); 
     } else 
     { 
      base.OnActionExecuted(filterContext); 
     } 
    } 

Und hinzugefügt, um die folgende Klasse:

namespace StackExchange.DataExplorer.Helpers 
{ 
    public class RedirectPermanentResult : ActionResult { 

     public RedirectPermanentResult(string url) { 
      if (String.IsNullOrEmpty(url)) { 
       throw new ArgumentException("url should not be empty"); 
      } 

      Url = url; 
     } 


     public string Url { 
      get; 
      private set; 
     } 

     public override void ExecuteResult(ControllerContext context) { 
      if (context == null) { 
       throw new ArgumentNullException("context"); 
      } 
      if (context.IsChildAction) { 
       throw new InvalidOperationException("You can not redirect in child actions"); 
      } 

      string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext); 
      context.Controller.TempData.Keep(); 
      context.HttpContext.Response.RedirectPermanent(destinationUrl, false /* endResponse */); 
     } 

    } 
} 

Die Begründung ist, dass ich eine permanente Umleitung (nicht eine temporäre) wollen, so dass die Suchmaschinen alle schlechten Links korrigieren.

+0

Nizza Ansatz, danke! –