Ako na jednoduchý URL Redirect

Ak potrebujete na svojom webe jednoduchý URL redirect, tak tu je môj jednoduchý návod ako na to. Predstavte si, že potrebujete aby používatelia videli iba jednoduché odkazy ako www.web.com/kitchen-123.aspx ale aby sa v skutočnosti volali “na pozadí” stránky www.web.com/products/item.aspx?id=123.

V ASP.NET je to veľmi jednoduché, stačí pri každom volaní stránky zavolať metódu HttpContext.Current.RewritePath(), ktorá zabezpečí, že namiesto stránky, ktorá neexistuje bude zavolaná tá správna a existujúca.

Jedinou a nutnou podmienkou je, aby bolo na IIS web serveri nastavené, že požiadavky na neexistujúce stránky spracováva práve ASP.NET.

A tu už je sľúbený jednoduchý návod.

1.) Do App_Code pridajte súbor Redirect.cs s obsahom:

using System;

using System.Xml;

using System.Xml.XPath;

using System.Configuration;

using System.Collections.Specialized;

using System.Text.RegularExpressions;

using System.Xml.Xsl;

using System.Reflection;

using System.Runtime.CompilerServices;

using System.Web;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

public class Rewriter : IConfigurationSectionHandler

{

    protected XmlNode _oRules = null;

    protected Rewriter() { }

    public string GetSubstitution(string zPath)

    {

        Regex oReg;

        foreach (XmlNode oNode in _oRules.SelectNodes("rule"))

        {

            oReg = new Regex(oNode.SelectSingleNode("url/text()").Value);

            Match oMatch = oReg.Match(zPath);

            if (oMatch.Success)

            {

                return oReg.Replace(zPath, oNode.SelectSingleNode("rewrite/text()").Value);

            }

        }

        return zPath;

    }

    public static void Process()

    {

        Rewriter oRewriter = (Rewriter)ConfigurationSettings.GetConfig("system.web/urlrewrites");

        string zSubst = oRewriter.GetSubstitution(HttpContext.Current.Request.Path);

        if (zSubst.Length > 0)

        {

            HttpContext.Current.RewritePath(zSubst);

        }

    }

    #region Implementation of IConfigurationSectionHandler

    public object Create(object parent, object configContext, XmlNode section)

    {

        _oRules = section;

        // TODO: Compile all Regular Expressions

        return this;

    }

    #endregion

}

2.)  Do Global.asax pridajte:

protected void Application_BeginRequest(Object sender, EventArgs e)

{

   Rewriter.Process();

}

Týmto sme povedali, že pri každej požiadavke sa skontroluje či je potrebné robiť mapovanie.

3.) Do web.config je potrebé pridať pár pravidiel, podľa ktorých sa bude URL prepisovať:

<?xml version="1.0"?>

<configuration>

  <system.web>

    <urlrewrites>

 

      <rule>
        <url>/([a-zA-Z]*)-(\d+)\.aspx</url>

        <rewrite>/products/item.aspx?Id=$2</rewrite>

      </rule>

    </urlrewrites>

  </system.web>

 

</configuration>

4.) Správne nastaviť IIS web server

Pre tento bod musíte mať prístup ku konfigurácii IIS. Je potrebné nastaviť na danej website, aby všetky požiadavky obslúžil ISAPI filter ASP.NET aspnet_isapi.dll. Ak ste na webovom hostingu, budete musieť požiadať poskytovateľa o túto zmenu. Myslím, že rozumný poskytovateľ s tým nebude mať žiaden problém. <skoro skrytá reklama>qsh.eu určite nemá :-)</skoro skrytá reklama>

…. jednoduché, však? :-)

Publikované Wednesday, September 24, 2008 8:57 AM spigi
Zaradené do:

Komentáre

# re: Ako na jednoduchý URL Redirect

Wednesday, September 24, 2008 1:25 PM Igor Kulman

Celkom pekne riesenie. Osobne vsak (z lenivosti:) pouzivam modul z http://urlrewriter.net/, staci nalikovat k projektu a hotovo, podporuje samozrejme regularne vyrazy a netreba nastavovat nic na serveri.

# re: Ako na jednoduchý URL Redirect

Wednesday, September 24, 2008 2:08 PM Borek

Pro čtenáře mající k dispozici IIS7 - toto a mnohem víc nyní poskytuje URL rewrite modul, learn.iis.net/.../using-url-rewrite-module

# re: Ako na jednoduchý URL Redirect

Wednesday, September 24, 2008 3:09 PM cruster

A dalsou alternativou je tiez pouzitie shiny new ASP.NET Routing Engine (System.Web.Routing), ktory prisiel s SP1.

# re: Ako na jednoduchý URL Redirect

Wednesday, September 24, 2008 3:20 PM spigi

Super chlapi, vdaka.

cruster, nechcel by si o tom napisat clanocek? :)

# re: Ako na jednoduchý URL Redirect

Wednesday, September 24, 2008 5:42 PM duracellko

nebolo by zle.. o ASP.NET Routing Engine som vobec nepocul.. nejak mi to uslo ako novinka v SP1.

# re: Ako na jednoduchý URL Redirect

Wednesday, September 24, 2008 9:37 PM vlko

to duracellko: to je asi tym, ze routing engine je tak nejak produktom ASP.NET MVC tam je znamy az az:)

# re: Ako na jednoduchý URL Redirect

Thursday, September 25, 2008 2:03 AM cruster

@spigi co by nie, skusim

@vlko tak tak, suhlas, no vsetky priame zavislosti routing engine od MVC boli pretrhnute kedysi medzi ASP.NET MVC preview 1 a preview 2 najma preto, aby routing engine mohli pouzivat aj asp.net dynamic data