Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 be redirected to domain.com using a 301 redirect. What's the best way to implement this in asp.net mvc? In global.asax?

like image 543
spender Avatar asked Feb 01 '10 10:02

spender


1 Answers

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\.(?<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();
        }
    }
like image 125
spender Avatar answered Oct 23 '22 12:10

spender