How to 301 redirect in ASP.NET 4.0?

后端 未结 5 624
再見小時候
再見小時候 2020-12-16 15:59

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

相关标签:
5条回答
  • 2020-12-16 16:10

    Version 4 of .NET actually has an improved function for single page implementation - the redirectpermanent.

    Response.RedirectPermanent(NEW_URL);

    0 讨论(0)
  • 2020-12-16 16:15

    If using IIS 7 or higher, the simplest solution is to use the httpRedirect element in your web.config.

    <httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Permanent">
         <add wildcard="/MyOldAspFile.aspx" destination="/MyNewFile.aspx" />
         <add wildcard="/MyOldHtmlFile.html" destination="/MyNewFile.aspx" />
    </httpRedirect>
    

    This method is very powerful, for example if you have changed the domain but the pages are the same, you have just to add:

    <system.webServer> 
        <httpRedirect enabled="true" childOnly="true" destination="http://www.mynewdomain.com/" /> 
    </system.webServer>
    

    I wrote a small article here: ASP.NET 301 permanent redirects: the best solution

    0 讨论(0)
  • 2020-12-16 16:30

    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

     void Application_BeginRequest(object sender, EventArgs e)
        {
            // Add permanent redirection for retired pages
            if (Request.Url.LocalPath.ToLower().StartsWith("/[OLD PAGE NAME]"))
            {
                Response.RedirectPermanent("/[NEW PAGE NAME]", false);
            }
        }
    

    OPTION 2: Modify the web.config

    <system.webServer>
        <httpRedirect enabled="true" httpResponseStatus="Permanent">
            <add wildcard="/[OLD PAGE NAME]" destination="/[NEW PAGE NAME]" />
        </httpRedirect>
    </system.webServer>    
    
    0 讨论(0)
  • 2020-12-16 16:33

    if you didn't know what is application domain name ,use something like this

    protected void Application_BeginRequest(object sender, EventArgs e)
        {
            if(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority).Contains("localhost"))return;
            var leftPartOfUrl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority).ToLower();
            if (leftPartOfUrl.StartsWith("http") && leftPartOfUrl.Split('.').Length == 1)
            {
                var fullUrl = HttpContext.Current.Request.Url.ToString();
                HttpContext.Current.Response.Status = "301 Moved Permanently";
                HttpContext.Current.Response.StatusCode = 301;
                HttpContext.Current.Response.AddHeader("Location", fullUrl.Insert(fullUrl.IndexOf("://", StringComparison.Ordinal) + 3, "www."));
                HttpContext.Current.Response.End();
            }
        }
    
    0 讨论(0)
  • 2020-12-16 16:36

    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:

    void Application_BeginRequest(object sender, EventArgs e) 
    {
        // Code that runs on every request
    
        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"));
        }
    
    }
    

    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

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