2012-05-20 35 views
8

Tôi đang cố gắng triển khai chuyển hướng URL cho trang web thay vì thực hiện từng trang một. Tôi muốn làm điều đó trong tập tin global.asax. Dưới đây là mã tôi đã xác định.Chuyển hướng 301 trong asp.net 4.0

Tôi muốn có http://website.net làm url chính & muốn có chuyển hướng URL vĩnh viễn nếu ai đó nhập số http://www.website.net.

Rất tiếc, trang này không hoạt động đối với trang web trực tiếp. Bất cứ ai có thể chỉ ra vấn đề trong mã. Mã không tạo ra bất kỳ lỗi nào.

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 

    if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("http://website.net")) 
    { 
     HttpContext.Current.Response.Status = "301 Moved Permanently"; 
     HttpContext.Current.Response.AddHeader("Location", Request.Url.ToString().ToLower().Replace("http://website.net", "http://www.website.net")); 
    } 

} 

Trả lời

13

Vấn đề chính: Bạn đang thực hiện công cụ trên trong Application_Start - chỉ được thực hiện một lần. Bạn nên kết nối với từng yêu cầu. Hãy thử điều này:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    // Code that runs on every request 

    if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("http://website.net")) 
    { 
     HttpContext.Current.Response.Status = "301 Moved Permanently"; 
     HttpContext.Current.Response.AddHeader("Location", Request.Url.ToString().ToLower().Replace("http://website.net", "http://www.website.net")); 
    } 

} 

Một cách tiếp cận tốt hơn là nên sử dụng URL viết lại, có thể được cấu hình từ bên trong Web.Config:

Microsoft rewriting module - Force www on url Or remove www from url

+0

Không hoạt động ng ... và nó không đưa ra lỗi nào – Learning

+0

Rất tiếc Lỗi của tôi. Nên có nhận thấy ... Tôi đang lập kế hoạch để thực hiện định tuyến url thay vì viết lại và tôi đã có vấn đề với viết lại do cấu trúc và không có. chuỗi truy vấn trong một số trang nhất định. Đánh giá cao câu trả lời của bạn. Cảm ơn – Learning

5

Phiên bản 4 của .NET thực sự có chức năng cải tiến cho đơn triển khai trang - redirectpermanent.

Response.RedirectPermanent(NEW_URL);

8

Nếu sử dụng IIS 7 hoặc cao hơn, giải pháp đơn giản nhất là sử dụng các yếu tố httpRedirect trong web.config của bạn.

<httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Permanent"> 
    <add wildcard="/MyOldAspFile.aspx" destination="/MyNewFile.aspx" /> 
    <add wildcard="/MyOldHtmlFile.html" destination="/MyNewFile.aspx" /> 
</httpRedirect> 

Phương pháp này là rất mạnh mẽ, ví dụ nếu bạn đã thay đổi tên miền nhưng các trang đều giống nhau, bạn có chỉ là để thêm:

<system.webServer> 
    <httpRedirect enabled="true" childOnly="true" destination="http://www.mynewdomain.com/" /> 
</system.webServer> 

tôi đã viết một bài báo nhỏ ở đây: ASP.NET 301 permanent redirects: the best solution

3

Xây dựng trên các câu trả lời chính xác và hữu ích trước đây, dưới đây là một vài ví dụ cụ thể. Giả sử bạn muốn xóa trang cũ (như tôi đã làm), có một vài tùy chọn.

OPTION 1: Sửa đổi Global.asax

void Application_BeginRequest(object sender, EventArgs e) 
    { 
     // Add permanent redirection for retired pages 
     if (Request.Url.LocalPath.ToLower().StartsWith("/[OLD PAGE NAME]")) 
     { 
      Response.RedirectPermanent("/[NEW PAGE NAME]", false); 
     } 
    } 

OPTION 2: Sửa đổi web.config

<system.webServer> 
    <httpRedirect enabled="true" httpResponseStatus="Permanent"> 
     <add wildcard="/[OLD PAGE NAME]" destination="/[NEW PAGE NAME]" /> 
    </httpRedirect> 
</system.webServer>  
0

nếu bạn không biết ứng dụng tên miền là gì, sử dụng một cái gì đó như thế này

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority).Contains("localhost"))return; 
    var leftPartOfUrl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority).ToLower(); 
    if (leftPartOfUrl.StartsWith("http") && leftPartOfUrl.Split('.').Length == 1) 
    { 
     var fullUrl = HttpContext.Current.Request.Url.ToString(); 
     HttpContext.Current.Response.Status = "301 Moved Permanently"; 
     HttpContext.Current.Response.AddHeader("Location", fullUrl.Insert(fullUrl.IndexOf("://", StringComparison.Ordinal) + 3, "www.")); 
    } 

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