ASP.net 的 URL 重写
有关于 URL 的重写,本文也只是拿来主意。相继有 MS 的组件“ URLRewriter”和在Global.asax里的“ Application_BeginRequest()”编码方式,以及IIS里的ISAPI设置。
娜列下来,实现方法也都很简单。
方法一:MS组件
这里也不用详解了,相关请看:
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
用法很简单,只需要把组件 URLRewriter.dll 拷到应用程序的 bin 目录下,然后在 web.config 下加入如下代码:
在 < configuration ></ configuration > 中加入:
< configSections >
< section name ="RewriterConfig" type ="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</ configSections >
< RewriterConfig >
< Rules >
< RewriterRule >
< LookFor > ~/(/d{4})/(/d{2})/Default/.aspx</ LookFor >
< SendTo > ~/Default.aspx?ID=$1</ SendTo >
</ RewriterRule >
</ Rules >
</ RewriterConfig >
然后在 < system.web ></ system.web > 中加入:
< httpHandlers >
< add verb ="*" path ="*.aspx"
type ="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</ httpHandlers >
最后在地址栏上键入:http://localhost/Test/2004/12/News.aspx
效果出来了。
上面的< LookFor > ~/(/d{4})/(/d{2})/News/.aspx</ LookFor >这句这正则表达式URL,即被重写的URL,而< SendTo > ~/Default.aspx?ID=$1</ SendTo >这一句为原始URL地址。其中的$1为第一个正则表达式值(上面例子为:2004),以此类推,第二个即为$2
方法二: Application_BeginRequest()
在应用程序中新建一个XML文件,文件内容为:文件名ReWriter.config
<? xml version ="1.0" encoding ="utf-8" ?>
< ReWriterUrls >
< rule >
< old > (.*)/News/(/d{4})/Default/.aspx</ old >
< new > ../../Default.aspx?id=$2& type=$3</ new >
</ rule >
</ 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
{
}
最后在地址栏上键入:http://localhost/Test/News/2004/Default.aspx
效果出来了。