In order to rewrite the url called www.domain.com/myfolder/items.aspx?Item_ID=1 to
www.domain.com/items/1 or www.domain.com/items/1.html or www.domain.com/items/1.aspx follow the steps
www.domain.com/items/1 or www.domain.com/items/1.html or www.domain.com/items/1.aspx follow the steps
1. Create an xml file under root directory named as Rule.xml and write this code
<?xml version="1.0" encoding="utf-8" ?> <urlrewrites> <rule> <url>item/(.*)</url> <rewrite>myfolder/items.aspx?Item_ID=$1</rewrite> </rule> <rule> <url>item/(.*)\.html</url> <rewrite>myfolder/items.aspx?Item_ID=$1</rewrite> </rule> <rule> <url>item/(.*)\.aspx</url> <rewrite>myfolder/items.aspx?Item_ID=$1</rewrite> </rule> <rule> <url>Products/Cart/(.*)\.aspx</url> <rewrite>Cart.aspx?ID=$1</rewrite> </rule> </urlrewrites>
2. Add the below content in the Global.asax file
void Application_BeginRequest(Object sender, EventArgs e) { string sPath = Context.Request.Path;//To overcome Postback issues, stored the real URL. Context.Items["VirtualURL"] = sPath; Regex oReg; System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(Server.MapPath("~/Rule.xml")); foreach (System.Xml.XmlNode oNode in xmlDoc.DocumentElement.SelectNodes("rule")) { oReg = new Regex(oNode.SelectSingleNode("url/text()").Value); Match oMatch = oReg.Match(sPath); if (oMatch.Success) { sPath = oReg.Replace(sPath, oNode.SelectSingleNode("rewrite/text()").Value); break; } } Context.RewritePath(sPath); }
3. Create a class file named as Form.cs and paste this code
using System; using System.Web.UI; using System.Web; public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter { protected override void Render(System.Web.UI.HtmlTextWriter writer) { base.Render(new RewriteFormHtmlTextWriter(writer)); } } public class RewriteFormHtmlTextWriter : HtmlTextWriter { public RewriteFormHtmlTextWriter(HtmlTextWriter writer) : base(writer) { this.InnerWriter = writer.InnerWriter; } public RewriteFormHtmlTextWriter(System.IO.TextWriter writer) : base(writer) { base.InnerWriter = writer; } public override void WriteAttribute(string name, string value, bool fEncode) { // If the attribute we are writing is the "action" attribute, and we are not on a sub-control, // then replace the value to write with the raw URL of the request - which ensures that we'll // preserve the PathInfo value on postback scenarios if ((name == "action")) { HttpContext Context = default(HttpContext); Context = HttpContext.Current; if (Context.Items["ActionAlreadyWritten"] == null) { // Because we are using the UrlRewriting.net HttpModule, we will use the // Request.RawUrl property within ASP.NET to retrieve the origional URL // before it was re-written. You'll want to change the line of code below // if you use a different URL rewriting implementation. value = Context.Request.RawUrl; // Indicate that we've already rewritten the 's action attribute to prevent // us from rewriting a sub-control under the control Context.Items["ActionAlreadyWritten"] = true; } } base.WriteAttribute(name, value, fEncode); } }
4. Write this line of code in every page which you want mask the url
protected override void Render(HtmlTextWriter writer)
{ if (HttpContext.Current.Items["VirtualURL"] != null) { string sVirURL = HttpContext.Current.Items["VirtualURL"].ToString(); RewriteFormHtmlTextWriter oWriter = new RewriteFormHtmlTextWriter(writer);//, sVirURL); base.Render(oWriter); } }
5. To use this <a href="item/1">Mouse</a>
6. In items.aspx use like this
if (!IsPostBack) if (Request.QueryString["Item_ID"] != null) string id = Request.QueryString["Item_ID"].ToString();
Tags: URL Rewriting in ASP.NET 2.0,URL Rewriting with ASP.NET 2.0,url rewriting in asp.net,url rewriting, asp.net url rewriting example, url rewriting sample project,url rewriting in asp.net sample code
No comments:
Post a Comment