2016-10-30 17 views
8

Sử dụng các bit AspNetCore 1.1 và mới RewriteMiddleware tôi đã viết một cái gì đó như thế này vào Startup.cs để xử lý www www chuyển hướng phi:Làm thế nào để chuyển hướng www đến quy tắc không www trong AspNetCore 1.1 xem trước 1 với RewriteMiddleware?

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    var options = new RewriteOptions() 
     .AddRedirect("(www\\.)(.*)", "$1"); 

    app.UseRewriter(options); 

    // Code removed for brevty 
} 

Kể từ khi RedirectRule chỉ áp dụng cho các đường dẫn và không phải toàn bộ yêu cầu uri, regex không khớp.

Làm cách nào để chuyển hướng www đến quy tắc không www bằng cách sử dụng cùng một phương pháp? Tôi không thích sử dụng số IISUrlRewriteRule.

Trả lời

11

RewriteOptions cho phép bạn thêm triển khai quy tắc tùy chỉnh. Như bạn đã xác định, các quy tắc viết sẵn không hỗ trợ chuyển hướng tên máy chủ lưu trữ. Tuy nhiên, điều này không quá khó để thực hiện.

Ví dụ:

public class NonWwwRule : IRule 
{ 
    public void ApplyRule(RewriteContext context) 
    { 
     var req = context.HttpContext.Request; 
     var currentHost = req.Host; 
     if (currentHost.Host.StartsWith("www.")) 
     { 
      var newHost = new HostString(currentHost.Host.Substring(4), currentHost.Port ?? 80); 
      var newUrl = new StringBuilder().Append("http://").Append(newHost).Append(req.PathBase).Append(req.Path).Append(req.QueryString); 
      context.HttpContext.Response.Redirect(newUrl.ToString()); 
      context.Result = RuleResult.EndResponse; 
     } 
    } 
} 

Bạn có thể thêm video này vào bộ sưu tập Quy định về RewriteOptions.

 var options = new RewriteOptions(); 
     options.Rules.Add(new NonWwwRule()); 

     app.UseRewriter(options); 
Các vấn đề liên quan