ASP.NET 301重定向会给某些用户造成问题

ASP.NET 301重定向会给某些用户造成问题,asp.net,global-asax,http-status-code-301,Asp.net,Global Asax,Http Status Code 301,这是我用来将网站从www.重定向到非www.版本的代码 void Application_BeginRequest(object sender, EventArgs e) { string authority = Request.Url.Authority; if (authority.StartsWith("www.")) { authority = authority.Remove(0, 4); string newUrl = "htt

这是我用来将网站从www.重定向到非www.版本的代码

void Application_BeginRequest(object sender, EventArgs e)
{
    string authority = Request.Url.Authority;
    if (authority.StartsWith("www."))
    {
        authority = authority.Remove(0, 4);
        string newUrl = "http://" + authority + Request.Url.PathAndQuery;

        Response.Clear();
        Response.Status = "301 Moved Permanently";
        Response.AddHeader("Location", newUrl);
        Response.End();            
    }
}
这是我用来验证上述代码是否按预期工作的工具:

虽然几乎所有用户都能如期工作,但其中一些用户抱怨他们无法访问该网站。我使用TeamViewer登录到他们的计算机,确实出现了一个问题。当他们试图访问网站时,FF和IE给出了一个错误:看起来你想要的网站不在那里


应该是什么问题?

您使用的是
.PathAndQuery
,请查看以下答案:

通过从重定向url中删除问号解决了此问题


因此,尝试使用
Request.Url.LocalPath
属性。

这实际上应该由DNS记录处理,而不是用代码处理。这是搜索引擎优化最友好的方式。这些机器可以直接浏览到没有
www.
前缀的版本吗?马丁,你如何使用DNS记录重定向?不,它们可以直接浏览非www版本。同样的错误也会出现。我想成为一个SEO友好的重定向,这就是为什么我想要一个301重定向。你们所有人都必须了解www.和非www网站,以及谷歌如何将其视为重复内容。我想将用户重定向到同一页面,但在URL中没有www。从“http://www.example.com/Home.aspx?id=2”到“http://example.com/Home.aspx?id=2”,如果后面的问号以url结尾,是否可以删除?类似于:if(newUrl.EndsWith(“?”)newUrl=newUrl.Substring(0,newUrl.Length-2);这应该只删除空查询字符串,而保留?id=2。