alv*_*peo 5 url-rewriting asp.net-core-mvc asp.net-core
这是我与ASP.NET Core 1.1 Url Rewrite中间件一起使用以从www重定向的核心。到非www:
var options = new RewriteOptions()
.AddRedirect("^(www\\.)(.*)$", "$2");
app.UseRewriter(options);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它不起作用。我知道正则表达式是正确的。怎么了
这是完整的Configure功能:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseRequestLocalization(new RequestLocalizationOptions() { DefaultRequestCulture = new RequestCulture("ru-ru") });
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
// URL Rewriting
var options = new RewriteOptions()
//.AddRedirect(@"^(https?:\/\/)(www\.)(.*)$", "$1$3");
.AddRedirect("^(www\\.)(.*)$", "$2");
app.UseRewriter(options);
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{action=Index}/{id?}",
defaults: new { controller = "Home" }
);
});
}
Run Code Online (Sandbox Code Playgroud)
问题是 .AddRedirect 和 .AddRewrite 只查看 URL 的路径/查询字符串。所以你的正则表达式是正确的,但是该方法只查看路径/查询,所以它永远不会看到 www. 此行为是大多数重写器的标准行为,例如 Apache mod_rewrite 和 IIS UrlRewrite。然而,这个用例应该很容易支持,我们很快就会研究它!
现在,为了获得预期的行为,您可以创建这样的自定义规则。请注意,我现在无法测试代码,但总体思路应该是正确的。
app.UseRewriter(new RewriteOptions().Add(ctx =>
{
// checking if the hostName has www. at the beginning
var req = ctx.HttpContext.Request;
var hostName = req.Host;
if (hostName.ToString().StartsWith("www."))
{
// Strip off www.
var newHostName = hostName.ToString().Substring(4);
// Creating new url
var newUrl = new StringBuilder()
.Append(req.Scheme)
.Append(newHostName)
.Append(req.PathBase)
.Append(req.Path)
.Append(req.QueryString)
.ToString();
// Modify Http Response
var response = ctx.HttpContext.Response;
response.Headers[HeaderNames.Location] = newUrl;
response.StatusCode = 301;
ctx.Result = RuleResult.EndResponse;
}
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |