2010-02-01 35 views
9

Chúng tôi có một trang web tại domain.com, cũng có thể truy cập thông qua mục CNAME cho www.domain.com trỏ ngược lại domain.com. Chúng tôi muốn tất cả khách truy cập vào www.domain.com được chuyển hướng đến domain.com bằng cách sử dụng chuyển hướng 301. Cách tốt nhất để thực hiện điều này trong asp.net MVC là gì? Trong global.asax?Asp.net mvc 301 chuyển hướng từ www.domain.com đến domain.com

+4

Cách đơn giản nhất là để tạo ra một trang web trong IIS để xử lý các chuyển hướng. Bạn sẽ không cần mã - chuyển hướng IIS có thể tự động xử lý nó. –

+1

Thật vậy. IIS là con đường để đi. Bạn không thực sự muốn kết hợp ứng dụng của mình với loại điều này khi IIS thực hiện nó miễn phí. IIS7 là cược tốt nhất của bạn ở đây. –

+1

Vấn đề ở đây là trang web nằm trong một trang trại ngồi phía sau bộ cân bằng tải mà chúng tôi có ít quyền kiểm soát. Máy chủ phân giải địa chỉ IP nội bộ của máy chủ và tên máy chủ ban đầu được đóng gói lại trong tiêu đề "x-forwarded-host". Theo tôi có thể thấy, quy tắc này sử dụng tính năng Chuyển hướng HTTP IIS7. – spender

Trả lời

22

Tôi chấp nhận rằng làm điều này ở cấp ứng dụng là không mong muốn theo nhận xét cho câu hỏi.

Cài đặt tính năng Chuyển hướng HTTP trong IIS7 là cách tốt nhất để thực hiện việc này.

Trong trường hợp của chúng tôi, các ràng buộc khác buộc chúng tôi thực hiện việc này ở cấp ứng dụng.

Dưới đây là đoạn code mà chúng tôi sử dụng trong global.asax để thực hiện chuyển hướng:

private static readonly Regex wwwRegex = 
     new Regex(@"www\.(?<mainDomain>.*)", 
        RegexOptions.Compiled 
         | RegexOptions.IgnoreCase 
         | RegexOptions.Singleline); 

    protected void Application_BeginRequest(Object sender, EventArgs e) 
    { 
     string hostName = Request.Headers["x-forwarded-host"]; 
     hostName = string.IsNullOrEmpty(hostName) ? Request.Url.Host : hostName; 
     Match match = wwwRegex.Match(hostName); 
     if (match.Success) 
     { 
      string mainDomain = match.Groups["mainDomain"].Value; 
      var builder=new UriBuilder(Request.Url) 
          { 
           Host = mainDomain 
          }; 
      string redirectUrl = builder.Uri.ToString(); 
      Response.Clear(); 
      Response.StatusCode = 301; 
      Response.StatusDescription = "Moved Permanently"; 
      Response.AddHeader("Location", redirectUrl); 
      Response.End(); 
     } 
    } 
+0

cung cấp cho tôi: Tên nhóm không hợp lệ: Tên nhóm phải bắt đầu với một ký tự từ –

+2

Điều này bây giờ đã được thực hiện dễ dàng hơn bằng cách sử dụng UrlRewrite có thể được thêm vào web.config của trang web. Chỉ muốn đề cập đến nó ở đây. http://stackoverflow.com/a/10193142 – gldraphael

+0

thích hợp nhất cho SEO với 'www' hoặc không có' www' vì [this] (http://stackoverflow.com/q/15951963/2218697) bài đăng nói với? – stom

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