从www.domain.com重定向到domain.com的Asp.net mvc 301重定向

11
我们在domain.com上有一个网站,也可以通过指向domain.com的CNAME条目的www.domain.com访问。我们希望将所有访问www.domain.com的访问者重定向到使用301重定向的domain.com。在asp.net mvc中,最好的实现方式是什么?在global.asax中吗?

4
最简单的方法是在IIS中创建另一个网站来处理重定向。您不需要编写代码——IIS重定向可以自动处理它。 - Mehrdad Afshari
1
确实。IIS是最好的选择。当IIS可以免费完成这项工作时,您真的不想将应用程序与此类事情绑定在一起。在这里,IIS7是您最好的选择。 - Dan Atkinson
1
问题在于该网站位于负载均衡器后面的农场中,我们对其拥有很少的控制权。主机解析为服务器的内部IP地址,原始主机名被重新打包在一个名为“x-forwarded-host”的头文件中。据我所见,这排除了使用IIS7 HTTP重定向功能的可能性。 - spender
你可能想看一下这个:http://serverfault.com/questions/145777/whats-the-point-in-having-www-in-a-url - Cherian
1个回答

22

我接受在应用程序层面这样做是不理想的,正如问题评论中所述。

安装IIS7中的HTTP重定向功能是最好的方法来完成此操作。

在我们的情况下,其他限制迫使我们在应用程序层面上执行此操作。

以下是我们在global.asax中使用的代码来执行重定向:

    private static readonly Regex wwwRegex = 
        new Regex(@"www\.(?<mainDomain>.*)",
                  RegexOptions.Compiled
                      | RegexOptions.IgnoreCase 
                      | RegexOptions.Singleline);

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        string hostName = Request.Headers["x-forwarded-host"];
        hostName = string.IsNullOrEmpty(hostName) ? Request.Url.Host : hostName;
        Match match = wwwRegex.Match(hostName);
        if (match.Success)
        {
            string mainDomain = match.Groups["mainDomain"].Value;
            var builder=new UriBuilder(Request.Url)
                            {
                                Host = mainDomain
                            };
            string redirectUrl = builder.Uri.ToString();
            Response.Clear();
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved Permanently";
            Response.AddHeader("Location", redirectUrl);
            Response.End();
        }
    }

给我返回:无效的组名:组名必须以单词字符开头。 - Liron Harel
2
现在使用可以添加到站点的web.config的UrlRewrite更容易了。只是想在这里提一下。https://dev59.com/wGkw5IYBdhLWcg3wE2dA#10193142 - galdin
带有www还是不带www对于SEO来说哪个更好,因为这篇文章说带有www更好? - Shaiju T
1
@stom 我建议你把那个问题带到一个合适的论坛。这里不是。 - spender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接