IIS URL Rewriting和ASP.NET routing(上)2011-05-27 博客园 Lance Zhang新版本URL-rewrite module for IIS 7.0的发布了,ASP.NET Routing组件随 着.NET Framework 3.5 SP1的发布,并在.NET Framework 4.0 Beta中进一步成 熟。作为ASP.NET 开发人员,我们不免会对这两个功能相近的组件抱有许多疑问 ,诸如“它们有什么异同?”“分别适用于什么环境?”等等。本文旨在描述这 两者之间的异同,并为开发人员提供什么时候使用哪一种解决方案的建议。从表面上看来,这两种技术似乎提供了非常相似的功能:为网站提供用户友 好的、搜索引擎友好的Url。然而,在这两种技术在原理上却有着本质的区别, 需要深入理解才能在选择应用时做出正确的决策。为了帮助大家理解这两种技术 ,我们首先从他们的运作原理开始讲起。本文翻译自IIS官方网站,针对国内惯用的术语进行了部分调整。URL重写(URL Rewriting)URL Rewriting已经不是什么新技术了,大约在10年前就已经在Apache服务器 上广泛应用。由于它被公认为是web管理员和开发人员的法宝,许多流行的基于 Apache的网站都依赖于Url重写来提供“优雅”的Url。简单的说,URL重写的理念非常简单:当一个客户端向服务端请求一个特定的 URL时,URL重写模块会分析所请求的URL并把请求更改,指向同一 Web服务器上 的另一个URL。在web请求周期中插入URL重写模块(如通过HttpModule)非常简 单,所以,它能够在服务器处理请求之前来修改所请求的URL。而服务端的处理 程序会根据重写后的URL来生成一个Response到客户端浏览器。由于重写过程发 生在服务端,所以客户端浏览器根本看不到重写后的URL,在客户端看来,他所 收到的Response来自原来所请求的URL。在IIS 7.0的架构中,这个过程可以由下图来展示:

微软所提供的URL重写模块(URL-rewrite module)是一个native-code的模块 ,插入web请求处理过程的Pre-begin Request或Begin Request 阶段,然后通过 所配置的一系列重写规则来进行URL重写。每一个重写规则对URL进行正则分析, 判断是否当前所请求的URL满足重写规则所定义的条件,如果满足,就根据规则 将原来的URL重写成一个新的URL。当所有的重写规则都过了一遍之后,URL重写 模块会生成一个最终的URL路径,传递给剩余的请求处理过程。也就是说IIS管道 中的请求处理程序所处理的是在URL重写模块所写后的URL。