I am trying to implement URL redirect for the website rather than doing it page by page. I want to do it in the global.asax file. Below is the code i have defined.
I want to have http://website.net as my main url & want to have a permanent URL redirect if someone types in http://www.website.net.
Unfortunately it is not working for the live website. Can anyone point out the problem in the code. The code doesn't generate any error.
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("http://website.net"))
{
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.AddHeader("Location", Request.Url.ToString().ToLower().Replace("http://website.net", "http://www.website.net"));
}
}
if you didn't know what is application domain name ,use something like this
Main problem: Your're doing the above stuff in
Application_Start
- which is only executed once. You should hook up with each request. Try this:An even better approach would be to use URL rewriting, which can be configured from within
Web.Config
:Microsoft rewriting module - Force www on url Or remove www from url
Building on previous correct and helpful answers, here are a couple specific examples. Assuming you want to delete the old page (as I did), there are a couple of options.
OPTION 1: Modify the Global.asax
OPTION 2: Modify the web.config
Version 4 of .NET actually has an improved function for single page implementation - the redirectpermanent.
Response.RedirectPermanent(NEW_URL);
If using IIS 7 or higher, the simplest solution is to use the httpRedirect element in your web.config.
This method is very powerful, for example if you have changed the domain but the pages are the same, you have just to add:
I wrote a small article here: ASP.NET 301 permanent redirects: the best solution