如何使用 RewriteMiddleware 在 AspNetCore 1.1 预览版 1 中将 www 重定向到非 www 规则?
How to redirect www to non www rule in AspNetCore 1.1 preview 1 with RewriteMiddleware?
使用 AspNetCore 1.1 位和新的 RewriteMiddleware 我在 Startup.cs
中写了类似的东西来处理 www 到非 www 的重定向:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var options = new RewriteOptions()
.AddRedirect("(www\.)(.*)", "");
app.UseRewriter(options);
// Code removed for brevty
}
由于 RedirectRule 仅适用于路径而不适用于整个请求 uri,
正则表达式不匹配。
如何使用相同的方法将 www 重定向到非 www 规则?我不想使用 IISUrlRewriteRule.
RewriteOptions
允许您添加自定义规则实施。如您所见,预先编写的规则不支持重定向主机名。然而,这并不难实现。
示例:
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;
}
}
}
您可以将其添加到 RewriteOptions 的规则集合中。
var options = new RewriteOptions();
options.Rules.Add(new NonWwwRule());
app.UseRewriter(options);
使用 AspNetCore 1.1 位和新的 RewriteMiddleware 我在 Startup.cs
中写了类似的东西来处理 www 到非 www 的重定向:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var options = new RewriteOptions()
.AddRedirect("(www\.)(.*)", "");
app.UseRewriter(options);
// Code removed for brevty
}
由于 RedirectRule 仅适用于路径而不适用于整个请求 uri, 正则表达式不匹配。
如何使用相同的方法将 www 重定向到非 www 规则?我不想使用 IISUrlRewriteRule.
RewriteOptions
允许您添加自定义规则实施。如您所见,预先编写的规则不支持重定向主机名。然而,这并不难实现。
示例:
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;
}
}
}
您可以将其添加到 RewriteOptions 的规则集合中。
var options = new RewriteOptions();
options.Rules.Add(new NonWwwRule());
app.UseRewriter(options);