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? :-)