秋色园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





     本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/499456 ,如需转载请自行联系原作者

相关文章
|
2天前
|
XML JavaScript 数据格式
Beautiful Soup 库的工作原理基于解析器和 DOM(文档对象模型)树的概念
Beautiful Soup 使用解析器(如 html.parser, lxml, html5lib)解析HTML/XML文档,构建DOM树。它提供方法查询和操作DOM,如find(), find_all()查找元素,get_text(), get()提取信息。还能修改DOM,添加、修改或删除元素,并通过prettify()输出格式化字符串。它是处理网页数据的利器,尤其在处理不规则结构时。
7 2
|
4天前
|
机器学习/深度学习 人工智能 数据可视化
号称能打败MLP的KAN到底行不行?数学核心原理全面解析
Kolmogorov-Arnold Networks (KANs) 是一种新型神经网络架构,挑战了多层感知器(mlp)的基础,通过在权重而非节点上使用可学习的激活函数(如b样条),提高了准确性和可解释性。KANs利用Kolmogorov-Arnold表示定理,将复杂函数分解为简单函数的组合,简化了神经网络的近似过程。与mlp相比,KAN在参数量较少的情况下能达到类似或更好的性能,并能直观地可视化,增强了模型的可解释性。尽管仍需更多研究验证其优势,KAN为深度学习领域带来了新的思路。
52 5
|
4天前
|
敏捷开发 测试技术 持续交付
极限编程(XP)原理与技巧:深入解析与实践
【5月更文挑战第8天】极限编程(XP)是一种敏捷开发方法,注重快速反馈、迭代开发和简单设计,以提高软件质量和项目灵活性。关键原则包括客户合作、集体代码所有权、持续集成等。实践中,使用故事卡片描述需求,遵循编程约定,实行TDD,持续重构,结对编程,并定期举行迭代会议。通过理解和应用XP,团队能提升效率,应对变化。
|
6天前
|
缓存 自然语言处理 JavaScript
万字长文深度解析JDK序列化原理及Fury高度兼容的极致性能实现
Fury是一个基于JIT动态编译的高性能多语言原生序列化框架,支持Java/Python/Golang/C++/JavaScript等语言,提供全自动的对象多语言/跨语言序列化能力,以及相比于别的框架最高20~200倍的性能。
|
7天前
|
传感器 vr&ar 计算机视觉
增强现实(AR)技术原理深度解析
【5月更文挑战第5天】本文深度解析了增强现实(AR)技术原理,包括图像识别与跟踪、三维注册技术和显示技术,并探讨了AR在游戏、教育、工业和医疗等领域的广泛应用。尽管面临准确性、成本和隐私等挑战,但随着技术进步,AR将在更多领域发挥关键作用,展现其潜力和价值。
|
12天前
|
存储 芯片
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
|
12天前
|
C语言 C++
【期末不挂科-单片机考前速过系列P1】(第一章:27题搞定单片机&其工作原理)经典例题盘点【选择题&判断题&填空题】(带图解析)
【期末不挂科-单片机考前速过系列P1】(第一章:27题搞定单片机&其工作原理)经典例题盘点【选择题&判断题&填空题】(带图解析)
|
13天前
|
JavaScript 前端开发 算法
vue生命周期函数原理解析,vue阻止事件冒泡方法实现
vue生命周期函数原理解析,vue阻止事件冒泡方法实现
|
13天前
|
芯片
EDA设计:原理、实践与代码深度解析
EDA设计:原理、实践与代码深度解析
26 2

推荐镜像

更多