asp.net URL重写实现动态页面静态化

  作者:bea

URL重写实现动态页面静态化几乎在所有web语言中都存在,那么为什么要实现动态页面静态化呢?最大的益处无疑就是使我们的网站更加友好与搜索引擎。 使用ASP.NET实现URL重写需要有MS的组件“URLRewriter”和在Global.asax里的“Application_BeginRequest()”编码方式,以及IIS里的ISAPI设置。 一、MS组件实现URL重写 使用MS主键实现URL重写用法很简单,只需要把组件URLRewriter.dll拷到应用程序的b
URL重写实现动态页面静态化几乎在所有web语言中都存在,那么为什么要实现动态页面静态化呢?最大的益处无疑就是使我们的网站更加友好与搜索引擎。

使用ASP.NET实现URL重写需要有MS的组件“URLRewriter”和在Global.asax里的“Application_BeginRequest()”编码方式,以及IIS里的ISAPI设置。

一、MS组件实现URL重写

使用MS主键实现URL重写用法很简单,只需要把组件URLRewriter.dll拷到应用程序的bin目录下,然后在web.config下加入如下代码:

在中加入:

~/("d{4})/("d{2})/Default".aspx

~/Default.aspx?ID=$1



然后在system.web>system.web>中加入:

httpHandlers>

type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>

httpHandlers>

最后在地址栏上键入:http://localhost/Test/2004/12/News.aspx

效果出来了。

上面的~/("d{4})/("d{2})/News".aspx这句这正则表达式URL,即被重写的URL,而~/Default.aspx?ID=$1这一句为原始URL地址。其中的$1为第一个正则表达式值(上面例子为:2004),以此类推,第二个即为$2

二、使用Application_BeginRequest()实现URL重写

在应用程序中新建一个XML文件,文件内容为:文件名ReWriter.config

xmlversion="1.0"encoding="utf-8"?>

ReWriterUrls>

(.*)/News/("d{4})/Default".aspx

http://www.cnblogs.com/Default.aspx?id=$2&type=$3

ReWriterUrls>

在Global.asax文件中的Application_BeginRequest(Object sender, EventArgs e)加入代码:

try

{

string path=Server.MapPath("~/ReWriter.config");

XPathDocument myXPathDocument = new XPathDocument(path);

XPathNavigator myXPathNavigator = myXPathDocument.CreateNavigator();

XPathNodeIterator myXPathNodeIterator =myXPathNavigator.Select ("//rule");

System.Text.RegularExpressions.Regex oReg;

string ReWriteUrl;

while (myXPathNodeIterator.MoveNext())

{

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

XPathNavigator nav2 = myXPathNodeIterator.Current.Clone();

string oldString="",newString="";

XPathNodeIterator it2 = nav2.Select("old");

while(it2.MoveNext())

{

oldString = it2.Current.Value;

break;

}

it2 = nav2.Select("new");

while(it2.MoveNext())

{

newString = it2.Current.Value;

break;

}

if(oldString != "" &&newString != "")

{

oReg = new System.Text.RegularExpressions.Regex(oldString);

if(oReg.IsMatch(Request.Url.ToString()))

{

ReWriteUrl = oReg.Replace(Request.Url.ToString(),newString);

HttpContext.Current.RewritePath(ReWriteUrl);

break;

}

}

}

}

catch

{

}

有用  |  无用

猜你喜欢