2010-06-21 15 views
16

Tôi có một trang web xanh được đặt tên:Thực hành tốt nhất để chuyển hướng http dành cho Windows Azure

  • http://myapp.cloudapp.net

Of-nhiên URL này là loại xấu xí vì vậy tôi set up a CNAME trỏ http://www.myapp.com đến url azure.

Tất cả đều ổn định cho đến khi ở đây, nhưng có một cú đánh.

http://myapp.cloudapp.net đã bị rò rỉ và hiện được lập chỉ mục bởi google và tồn tại trên các trang web khác.

Tôi muốn chuyển hướng vĩnh viễn bất kỳ yêu cầu myapp.cloudapp.net tới ngôi nhà mới tại www.myapp.com

Trang web tôi đã được mã hóa trong MVC.Net 2.0, vì đây là một ứng dụng xanh , không có giao diện người dùng để truy cập IIS và mọi thứ cần phải được thực hiện trong mã ứng dụng hoặc web.config.

Cách sạch sẽ để đặt chuyển hướng vĩnh viễn tại chỗ là gì, nó có được đặt trong web.config hoặc trong bộ điều khiển chung không?

Trả lời

17

Bạn có thể muốn thay vì sử dụng mô-đun viết lại IIS (có vẻ "sạch hơn"). Đây là bài đăng trên blog cho biết cách thực hiện điều này: http://weblogs.asp.net/owscott/archive/2009/11/30/iis-url-rewrite-redirect-multiple-domain-names-to-one.aspx. (Bạn sẽ chỉ cần đặt đánh dấu có liên quan trong web.config.)

Một ví dụ cai trị bạn có thể sử dụng là:

<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 được cài đặt trên tất cả các máy ảo Windows Azure. (2.0 có sẵn trong OS 1.3 trở lên.) – smarx

+0

Yerp vừa phát hiện ra ở đây: http://msdn.microsoft.com/en-us/library/dd573358.aspx Tôi chấp nhận câu trả lời này khiến nó hơi sạch hơn, sẽ không phải xả rác mã số của tôi –

+3

Đó là 4 năm sau đó; đây vẫn là cách duy nhất để làm điều này? Tôi yêu Azure nhưng các công cụ chuyển hướng là loại gây phiền nhiễu; tức là phải sử dụng DNS để chuyển hướng www sang không phải www; phải thực hiện điều này để chuyển hướng * .azurewebsites.net đến miền tùy chỉnh. Đây phải là công cụ chuẩn nên có hộp kiểm trong cài đặt cấu hình trang web. – kamranicus

5

Đây là những gì tôi đã làm:

Chúng tôi có một lớp điều khiển cơ sở chúng tôi sử dụng cho tất cả các bộ điều khiển của chúng tôi, bây giờ chúng tôi ghi đè:

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

Và thêm lớp sau:

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

    } 
} 

Lý do là tôi muốn chuyển hướng vĩnh viễn (không phải là tạm thời) để công cụ tìm kiếm sửa tất cả các liên kết xấu.

+0

đẹp cách tiếp cận, cảm ơn! –

Các vấn đề liên quan