2016-10-30 12 views
8

Używanie AspNetCore 1,1 bity i nową RewriteMiddleware napisałem coś takiego w Startup.cs obsłużyć www do nie www przekierowanie:Jak przekierować regułę www do wersji innej niż WWW w AspNetCore 1.1 podgląd 1 za pomocą programu RewriteMiddleware?

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

    app.UseRewriter(options); 

    // Code removed for brevty 
} 

Od RedirectRule zastosowanie tylko do ścieżki, a nie cały URI żądania, wyrażenie regularne nie pasuje.

Jak mogę przekierować stronę www do reguły innej niż www, używając tej samej metody? Nie chciałbym korzystać z IISUrlRewriteRule.

Odpowiedz

11

RewriteOptions pozwala dodać niestandardową implementację reguły. Po zidentyfikowaniu wstępnie napisane reguły nie obsługują przekierowywania nazw hostów. Jednak nie jest to zbyt trudne do wdrożenia.

Przykład:

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

Można dodać do zbioru zasad dotyczących RewriteOptions.

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

     app.UseRewriter(options); 
Powiązane problemy