Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用重写中间件在AspNetCore 1.1 preview 1中将www重定向到非www规则?_C#_Asp.net Core_.net Core - Fatal编程技术网

C# 如何使用重写中间件在AspNetCore 1.1 preview 1中将www重定向到非www规则?

C# 如何使用重写中间件在AspNetCore 1.1 preview 1中将www重定向到非www规则?,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,使用aspnetcore1.1位和新的代码,我在Startup.cs中写入了类似的内容,以处理从www到非www的重定向: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { var options = new RewriteOptions() .AddRedirect("(www\\.)(.*)", "$1"); app.UseRewriter(options);

使用aspnetcore1.1位和新的代码,我在
Startup.cs
中写入了类似的内容,以处理从www到非www的重定向:

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

    app.UseRewriter(options);

    // Code removed for brevty
}
由于只应用于路径,而不应用于整个请求uri, 正则表达式不匹配


如何使用相同的方法将www重定向到非www规则?我不想使用。

重写选项
允许您添加自定义规则实现。正如您所指出的,预先编写的规则不支持重定向主机名。然而,这并不难实现

例如:

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;
        }
    }
}
您可以在“重写选项”中将其添加到规则集合中

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

        app.UseRewriter(options);

它不适用于我的网站,我使用ssl,我将http更改为https,但仍然不起作用。这是我的网站:我只想补充一点,如果你使用NWebsec重定向验证,那么你需要将你自己的域添加到AllowedDestinations中,否则当从www重定向到域时,它将通过live中的异常。