2010-06-21 5 views
16

J'ai un site d'azur qui est nommé:Les meilleures pratiques pour la redirection http pour Windows Azure

  • http://myapp.cloudapp.net

-sûr cette URL est un peu laid, donc je set up a CNAME que les points http://www.myapp.com à la url azur.

Tout va bien jusqu'à ici, mais il y a un hic.

http://myapp.cloudapp.net a fuité et est maintenant indexé par google et vit sur d'autres sites.

Je voudrais rediriger de façon permanente toute demande de myapp.cloudapp.net à la nouvelle maison à www.myapp.com

Le site est à moi est codé en MVC.Net 2.0, car cela est une application d'azur , il n'y a pas d'interface utilisateur pour accéder à IIS et tout doit être fait dans le code de l'application ou web.config.

Qu'est-ce qu'un moyen propre de définir une redirection permanente en place, devrait-il aller dans web.config ou dans un contrôleur global?

Répondre

17

Vous pouvez utiliser à la place le module de réécriture IIS (semble "plus propre"). Voici un billet de blog qui montre comment faire ceci: http://weblogs.asp.net/owscott/archive/2009/11/30/iis-url-rewrite-redirect-multiple-domain-names-to-one.aspx. (Vous aurez juste besoin de mettre les balises pertinentes dans web.config.)

Un exemple, vous pouvez utiliser la règle est:

<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

L'URL Rewrite 2.0 est installée sur toutes les machines virtuelles Windows Azure. (2.0 est disponible dans OS 1.3 et ci-dessus.) – smarx

+0

Yerp vient d'être trouvé ici: http://msdn.microsoft.com/en-us/library/dd573358.aspx J'accepte cette réponse parce qu'il est un peu plus propre, ne sera pas avoir à jeter mon code –

+3

C'est 4 ans plus tard; est-ce toujours le seul moyen de le faire? J'aime Azure mais le truc de redirection est un peu ennuyeux; c'est-à-dire utiliser DNS pour rediriger www vers un non-www; devez implémenter cela pour rediriger * .azurewebsites.net vers un domaine personnalisé. Ce devrait être des choses standard qui devraient avoir une case à cocher dans les paramètres de configuration du site. – kamranicus

5

C'est ce que je l'ai fait:

Nous avons une classe de contrôleur de base que nous utilisons pour tous nos contrôleurs, nous remplaçons maintenant:

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

et a ajouté la classe suivante:

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

    } 
} 

Le raisonnement est que je veux une redirection permanente (pas temporaire) afin que les moteurs de recherche corrigent tous les mauvais liens.

+0

approche Nice, merci! –

Questions connexes