1.
有关于URL的重写,本文也只是拿来主意。相继有MS的组件“
URLRewriter”和在Global.asax里的“
Application_BeginRequest()”编码方式,以及IIS里的ISAPI设置。
娜列下来,实现方法也都很简单。
方法一:MS组件
这里也不用详解了,相关请看:
用法很简单,只需要把组件URLRewriter.dll拷到应用程序的bin目录下,然后在web.config下加入如下代码:
在
<
configuration
></
configuration
>
中加入:
<configSections>
<sectionname="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
>
<addverb="*"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>http://www.cnblogs.com/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
{
}
效果出来了。
2
Asp.net 用url重写(URLReWriter)实现任意二级域名
好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑. 来找这篇文章的,应该都知道什么叫二级域名吧,废话就不说了.但是讨论前,先要明白一个思想问题. 一个最简单的考虑是,用户敲入了一个简单的不带任何参数地址, http://love.kerry.com然后我们把这个地址改成一个符合程序需要的带参数的地址, http://kerry.com?lover=notus,最后处理之. 大体相当于这样的一段程序 //用我们的httpmodule程序截获原始url 接下来,我们来实现url重写. 上面就是url重写的基本知识,而用url重写实现二级域名,过程一样.因为无论是二级域名还是三级域名,都是一个url地址.只要我们截获这个url地址,就可以在处理的时候动手脚. 这些工作挺麻烦,但是网络上已经有高人给我们写了这样的程序,参看下面的文章: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx http://www.cnblogs.com/jzywh/archive/2005/09/29/246650.html http://www.cnblogs.com/jzywh/archive/2006/02/20/334004.html 文章结束了. 在实施过程中会碰到一些问题,大多是因为看上面的文章不仔细产生的,但是说实话,那么长的文章要看完也不容易.下面我来记录一些重要的问题.其中最后的两个问题,用具体的代码展示了如何处理重写的目标url以达到我们的要求 为什么非要用泛解析?
简单理解,就是一块处理http请求的程序
首先,在域名服务商那里添加一个*.kerry.com的二级域名,指向你的服务器ip
在httpmodule程序里设置断点后,无论怎么样,流程都没有从这里走.原因在于,你没有向web程序注册你的httpmodule程序.这个工作需要在web.config中完成.
这是因为你没有向web程序注册你的RewriterConfig配置节. 这个工作需要在web.config中完成.
大多的工作是在URLRewriter. ModuleRewriter. Rewrite()方法里.关键阶段是这里:
//找到url里的二级域名 //根据需要设定要重写的目标url RewriterUtils.RewriteUrl(app.Context, sendToUrl); 在web.config里配置规则的时候,需要这样
http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx 现在传上去,不能显示id参数,都改成二级域名的方式. 这个时候该怎么办? 首先配置规则 首先,我们应该知道,浏览器实际上接受的不是http://love.kerry.com/,而是http://love.kerry.com/default.aspx ,因此,你的</LookFor>规则应该这样写 或许你是指这篇文章 http://blog.csdn.net/mengyao/archive/2007/01/25/1493537.aspx 大家可以看到,其基本的方法都是一样的.之所以没有把这个列在最前面,是因为这个做法有些取巧,可能一开始不是那么好理解.但是我相信看到最后的朋友再看这篇文章,应该都会会心的一笑 |
ASP.net的url重写(转自CSDN)
最新推荐文章于 2016-04-12 21:09:00 发布