秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三)

文章回顾:

1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用

 

2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程

 

本节,将从 秋色园 的整站入口:UrlRewrite.dll入手解析无后缀原理。

 

鉴于园子里有很多UrlRewrite的文章,因此就不略为简单的讲解了:

 

一:用ISAPI筛选器:即网上第三方发布的比较常见的,如:RewriteEval.dll

 

秋色园早期的版本始于2007,使用的就是第三方的插件,随着创业公司的结束,沉默了2年。

 

回顾当年参与开发博客的一共有这么几种角色:

 

1:技术总监负责指导我写CYQ.Data,和指导另两名选手外挂js和中文转拼音,同时写了个页面基类

 

2:我负责博客用户后台,另一同事负责写博客前台

 

3:一女同事负责写js外挂

 

4:2个美工负责写了好几套模版

 

5:另一个同事折腾了个中文转拼音的。

 

6:一共花了3个月左右的时间,开发了出来。

 

以前7个人干的活,现在,我一个人干了,知道我有多不容易了吧。

 

2009年时,随着CYQ.Data的二次小改进,打算搭建个人博客,顺便把它更换数据层,却发现,实在是改不动,一个业务类就上万行代码。

同事那“复制+粘贴”的强大,表现的是相当的淋漓尽致,因此只好放弃改动,只删除一些不要的功能,然后重新定位了下URL,简单改造成单用户博客

 

还弄了个空间域名51xxdn,便宜没好货,150/一年的服务器三天两头就打不开,一天到晚是和客服沟通。一年后站点到期后我就扔了,连备案过的域名也不要了。

 

当年使用第三方插件时,遇到麻烦的地方:

需要把dll提交给客服,然后还要教客服的技术人员怎么添加,最可怕的是还要重启IIS才生效。

 

人家一个服务器放那么多网站,咋能随随便便的让要求重启IIS呢?可是不重启你的站点又又打不开,所以每次还要挑无中午吃饭的时间重启,重启后还是不行,不行咋折腾?

 

过了一会客服技术又说行了,勉强运行了起来,后来发现该服务器还是相当的经常性的重启IIS,因为站点老是打不开。

 

还有每次修改代码修改或增加URL规则时,又得叫人家重启下IIS,唉,那个折腾,人家也折腾。

新版本的秋色园,为了避免这种情况,自然得使劲的考虑把它给弄掉,于是重写还是自己来。

 

二:IHttpModule的RewritePath方法

 

自己来,怎么来?用C++写个ISAPI会不会?答:不会。

 

还是老实的用.net写好了。

那就来点简单的了:从Global.asax折腾到IHttpHandle,折腾了半天,搞错了方向,转来转去还是在原地,后来经地的那么一搜,才发现了,路子要走还得往IHttpModule上走。

 

用IHttpModule很容易,很多人都用这个折腾,写个类继承自IHttpModule,然后到配置文件里注册一下就可以了,示例如下:

 

1:新建类库项目:起名:UrlRewrite

 

2:添加引用System.Web,因为IHttpModule在这名称空间下,而类库默认是没引用这个的

 

3:把Class1.cs更名为UrlRewrite.cs,并让类继承自IHttpModule,实现接口,最终如下:

把着我们把代码小小调整一下如:

#region IHttpModule 成员

public void Dispose()
{
//throw new Exception("The method or operation is not implemented.");
}

public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpUrlRewrite(app.Context);
}
public void HttpUrlRewrite(HttpContext context)
{
string url = context.Request.Url.ToString();//用户请求的Url
//--这里要做很多Url逻辑处理
context.RewritePath("~/Default.aspx", null,"url="+url);

}
#endregion

上面的代码,意思为:

将整个请求的url都当成参数送到Default.aspx页面中,所有的请求都转化为Default.aspx?url=www.cyqdata.com类似的方式

 

下面再建一个站点,来接受并输出结果

 

4:添加新建网站起名:UrlRewriteDemo

ps:本来是要建应用程序的,怕大伙下载示例时打不开,所以示例用网站形式

 

5:添加对UrlRewrite项目的引用

 

6:F5一下,调出web.config,然后在配置文件添加配置项代码如下:

< httpModules>
< add name="UrlRewrite" type="UrlRewrite.UrlRewrite,UrlRewrite" />
< /httpModules>

目前情况示例如图:

然后到Default.aspx写一行代码输出接收到的参数:

protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Request["url"]);
}

 

一切就绪,运行,我们看结果:

 

图1:请求默认存在的页面,输出结果,表示很正常

 

图2:随便请求一个不存在页面,输出了结果,表示也很正常

 

图3:请求一个连后缀都没有的Url,输出了结果,表示有点惊讶

 

从图3看出,看来VS2005集成的IIS对所有的请求都统一处理了,所以连无后缀的也能处理

 

重点说明:

对于以IIS站点开发或最终部署来说,默认aspnet_isapi.dll是处理不了无后缀或图片等后缀的,因此,需要通过添加扩展“通用映射”能达到此功能。

 

IIS6下如何添加见:如何安装部署秋色园CYQBlog站点

从以上解析的内容可以看出,已经可以截取到用户输出的任意请求地址,包括无后缀。

那么秋色园具体是如何处理各种请求的,读取配置文件得用正则解析还是说其它?

 

见下篇为你解析内部实现原理,敬请关注。

 

最后是示例代码下载: UrlWrwriteDemo.rar

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2011/02/19/1958538.html

时间: 2024-10-26 05:39:31

秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三)的相关文章

秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL   附说: 为了加快 秋色园 和 CYQ.Data 数据框架 的开源速度及更好的发展, 目前正在寻找开源团队成员,有意向创业加入者, 欢迎点击看此贴:秋色园[CYQ.Data]开源团队寻人   OK

秋色园QBlog技术原理解析:性能优化篇:字节、缓存、并发(十二)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建

秋色园QBlog技术原理解析:性能优化篇:access的并发极限及超级分库分散并发方案(十六)

上节回顾:   上节 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五) 中, 介绍了 秋色园QBlog 在性能优化方面,从技术的优化手段,开始步入数据库设计优化,并从数据的使用情况上进行了分析,从而将文章内容进行分离,得到新的分表,由于内容比较大,进而分了库,达到一种基础减压.   本节内容:   本节将介绍秋色园 QBlog 的Super分库方案,以及何以如此Super分库的原因.   描述说明:   在进行上了上节的分库方案后,虽然感觉一度秋色园QBlog的访

秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七)

上节概要:   上节 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及分库分散并发方案(十六) 中, 介绍了 Access的并发上限,及从某种程度上 秋色园QBlog 针对并发上限进行了多个数据的划分,从而最大并发上限从64提升到64*N(个数据库),虽然总和的最大并发值是上升了,但是单个库的最大值并没有变化,或者说单个表的最大并发值没有发生变化,上限仍是64. 于是,对于频繁产生更新操作的访问计数器(用户表及文章表),是该进入优化的方案了.   本节概要:   本节将介绍秋色

秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建

秋色园QBlog技术原理解析:独创的多语言翻译机制(九)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建

秋色园QBlog技术原理解析:Web之页面处理-内容填充(八)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建

秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建

秋色园QBlog技术原理解析:Module之页面基类-生命周期流程(六)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4:  秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5:  秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍