Asp.net mvc 301 redirect from www.domain.com to domain.com

后端 未结 1 440
小蘑菇
小蘑菇 2020-12-03 05:46

We have a website at domain.com, which is also accessible via a CNAME entry for www.domain.com that points back to domain.com. We\'d like all visitors to www.domain.com to b

1条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-03 06:46

    I accept that doing this at application level is non-desirable as per the comments to the question.

    Installing the HTTP Redirect feature in IIS7 is the best way to do this.

    In our case, other constraints force us to do this at application level.

    Here is the code that we use in global.asax to perform the redirect:

        private static readonly Regex wwwRegex = 
            new Regex(@"www\.(?.*)",
                      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();
            }
        }
    

    0 讨论(0)
提交回复
热议问题