【问题标题】:Asp.net mvc 301 redirect from www.domain.com to domain.comAsp.net mvc 301 从 www.domain.com 重定向到 domain.com
【发布时间】:2011-01-11 16:04:40
【问题描述】:

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

【问题讨论】:

  • 最简单的方法是在 IIS 中创建另一个网站来处理重定向。您不需要编写代码——IIS 重定向可以自动处理它。
  • 确实如此。 IIS 是要走的路。当 IIS 免费执行此操作时,您真的不想将您的应用程序与此类事情联系起来。 IIS7 是您最好的选择。
  • 这里的问题是该站点位于一个农场中,位于我们几乎无法控制的负载均衡器后面。主机解析为服务器的内部 IP 地址,原始主机名被重新打包在标头“x-forwarded-host”中。据我所知,这排除了使用 IIS7 HTTP 重定向功能。
  • 你可能想看看这个serverfault.com/questions/145777/…

标签: asp.net-mvc redirect subdomain


【解决方案1】:

我接受根据问题的 cmets,在应用程序级别执行此操作是不可取的。

在 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();
        }
    }

【讨论】:

  • 给我:无效的组名:组名必须以单词字符开头
  • 现在使用可以添加到站点的 web.config 中的 UrlRewrite 使这变得更容易。只是想在这里提一下。 stackoverflow.com/a/10193142
  • 使用www 或不使用www 最适合搜索引擎优化,因为this 帖子说带有?
  • @stom 我建议您将这个问题带到适当的论坛。不是这个。
猜你喜欢
  • 2011-09-24
  • 2013-08-20
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
相关资源
最近更新 更多