IIS URL Rewriting 和 ASP.NET routing(下)

  在IIS URL Rewriting 和 ASP.NET routing(上)中,我们针对IIS URL Rewriting 和 ASP.NET routing的理念和功能分别进行分析并进行对比,在清楚了这些基本原理和异同之后,我们该如何在应用中挑选合适的URL优化方案呢?在本文中,我们将对此进行探讨分析,并例举几种两者协同应用的案例。

  本文翻译自IIS官方网站,针对国内惯用的术语进行了部分调整。

  我们该如何选择?

  首先,如果我们的Web应用程序有任何除了ASP.NET之外的动态网页技术,那么选择是绝对明显的:用IIS URL重写模块(IIS URL-rewrite module)。否则的话,主要判断规则如下:

如果我们的ASP.NET Web应用程序使用了ASP.NET MVC 或者 ASP.NET Dynamic Data 技术的话,请使用ASP.NET路由。我们的应用程序URL优化过程将从原生支持中获益(ASP.NET MVC 和ASP.NET Dynamic Data直接包含ASP.NET Routing)。早期的ASP.NET 路由不支持WebForm,而目前的版本已经支持标准的Web Form应用程序了。详见此地。如果我们是基
于一个已
有的ASP.NET网站,而希望尽量不去更改它的话,请使用URL重写模块。因为URL重写模块能够在不更改现有程序的基础上对网站提供“用户友好”“搜索引擎友好”的URL。
同样,它也允许我们创建重定向规则,用来重定向搜素引擎的爬虫到
新的URL去。

  然而在实践中这两种技术并不是只能选择一个,他们往往还可以相辅相成。在接下来的章节中,我们将概述几个协同使用ASP.NET路由和URL重写模块的案例。

  为网站强制实施标准的URL

  举个例子,比如我们想强制使用http://www.mysite.com/home/about 来替代 http://mysite.com/Home/About。 当客户端请求一个不符合标准格式的URL时,客户端奖杯跳转到一个符合标准格式的URL。在这种情况下,我们可以使用URL重写模块来强制URL跳转,而使用ASP.NET 路由来选择一个handler来处理所请求的URL路径。

  下面的代码展示了这个案例中可能用到的URL重写模块配置代码:

<rewrite> <rules> <rule name="Enforce canonical hostname" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" negate="true" pattern="^www\.mysite\.com$" /> conditions> <action type="Redirect" url="http://www.mysite.com/{R:1}" redirectType="Permanent" /> rule> rules>rewrite>

  提供来自其它网站或其它服务器上的静态内容

  例如,我们的网站部署在多台服务器上,而动态页面的内容部署在一台服务器或一个网站上,而所有的静态内容部署在另一台服务器或另一个网站上。这时,我们可以使用URL重写模块协同IIS Application Request Routing module 来将对镜头内容的请求转到静态内容服务器(网站)上去,而由当前服务器处理所有的动态网页请求。这中环境下,ASP.NET 路由恰好只对所有的动态网页内容起效,而不对静态内容其效果。

  下面的代码展示了这个案例中可能用到的URL重写模块配置代码:

<rewrite> <rules> <rule name="Forward to static file server"> <match url="^.+\.(?:jpg|bmp|gif)$" /> <action type="Rewrite" url="http://static_file_server/{R:0}" /> rule> rules>rewrite>

  静态内容管理

  当我们网站中的静态内容移动到了一个新的地址时,我们常常还需要支持老的URL,以做到向后兼容,甚至我们并不想让用户感觉到文件或文件夹移动过了。这种情况下,我们可以使用URL重写模块来重写静态文件的路径,同时使用ASP.NET路由来处理所有的动态ASP.NET页面。

  下面的代码展示了这个案例中可能用到的URL重写模块配置代码:

<rewrite> <rules> <rule name="Rewrite to new folder"> <match url="^Images/(.+)$" /> <action type="Rewrite" url="NewImages/{R:1}" /> rule> rules>rewrite>

  阻止某些请求

  URL重写模块可以用来阻止某些情况下指定的请求,例如,我们可以阻止网站爬虫访问某些特定的URL路径。这种情况下,我们让被阻止的请求压根不到达ASP.NET的路由处理,如此来减少服务器的负载。

  下面的例子展示了如何配置URL重写规则,来阻止一个指定的网站爬虫。可以根据指定的user-agent HTTP头或者IP地址来进行阻止:

<rewrite> <rules> <rule name="Block SomeRobot" stopProcessing="true"> <match url="^folder1/folder2" /> <conditions logicalGrouping="MatchAny"> <add input="{USER_AGENT}" pattern="SomeRobot" /> <add input="{REMOTE_ADDR}" pattern="201\.45\.33\.[0-5]" /> conditions> <action type="AbortRequest" /> rule> rules>rewrite>
  发展方向

  尽管IIS URL重写和ASP.NET路由在功能上有一些重复,但它们在情景定位上和技术上是相互独立的。因此,这两种技术将作为IIS的独立组建持续存在并进一步发展,并且,两者有很大的集成潜力。例如,ASP.NET路由可能会参照URL重写模块强大的管理工具。而URL重写模块可能会与ASP.NET更好的集成,以提供更强大的扩展性和可自定义性。

  结论

  IIS URL重写和ASP.NET路由都能够用于Web应用程序的URL优化处理,但ASP.NET路由可以看作是一种ASP.NET的优化解决方案,因此,它是web开发人员设计友好URL的应用程序时的好选择。而IIS URL重写模块是一个通用的URL处理机制,定位于多种技术场景,特别是它能够让web开发人员和网站管理人员能够在不改动程序代码的情况下优化URL。

  相关文档URL-rewrite module documentation and tutorialsASP.NET routing documentationASP.NET MVCASP.NET Dynamic Data   参考阅读Using URL Rewrite ModuleProvide URL Rewriting FunctionalityRule with Rewrite Map - rule templateIIS URL Rewriting and ASP.NET routing

时间: 2025-01-21 15:03:28

IIS URL Rewriting 和 ASP.NET routing(下)的相关文章

IIS URL Rewriting和ASP.NET routing(下)

在IIS URL Rewriting 和 ASP.NET routing(上)中,我们针对IIS URL Rewriting 和 ASP.NET routing的理念和功能分别进行分析并进行对比,在清楚 了这些基本原理和异同之后,我们该如何在应用中挑选合适的URL优化方案呢? 在本文中,我们将对此进行探讨分析,并例举几种两者协同应用的案例. 我们该如何选择? 首先,如果我们的Web应用程序有任何除了ASP.NET之外的动态网页技术,那 么选择是绝对明显的:用IIS URL重写模块(IIS URL

艾伟_转载:IIS URL Rewriting 和 ASP.NET routing(下)

在IIS URL Rewriting 和 ASP.NET routing(上)中,我们针对IIS URL Rewriting 和 ASP.NET routing的理念和功能分别进行分析并进行对比,在清楚了这些基本原理和异同之后,我们该如何在应用中挑选合适的URL优化方案呢?在本文中,我们将对此进行探讨分析,并例举几种两者协同应用的案例. 本文翻译自IIS官方网站,针对国内惯用的术语进行了部分调整. 我们该如何选择? 首先,如果我们的Web应用程序有任何除了ASP.NET之外的动态网页技术,那么选

艾伟_转载:IIS URL Rewriting 和 ASP.NET routing(上)

新版本URL-rewrite module for IIS 7.0的发布了,ASP.NET Routing组件随着.NET Framework 3.5 SP1的发布,并在.NET Framework 4.0 Beta中进一步成熟.作为ASP.NET 开发人员,我们不免会对这两个功能相近的组件抱有许多疑问,诸如"它们有什么异同?""分别适用于什么环境?"等等.本文旨在描述这两者之间的异同,并为开发人员提供什么时候使用哪一种解决方案的建议. 从表面上看来,这两种技术似乎

IIS URL Rewriting 和 ASP.NET routing(上)

新版本URL-rewrite module for IIS 7.0的发布了,ASP.NET Routing组件随着.NET Framework 3.5 SP1的发布,并在.NET Framework 4.0 Beta中进一步成熟.作为ASP.NET 开发人员,我们不免会对这两个功能相近的组件抱有许多疑问,诸如"它们有什么异同?""分别适用于什么环境?"等等.本文旨在描述这两者之间的异同,并为开发人员提供什么时候使用哪一种解决方案的建议. 从表面上看来,这两种技术似乎

IIS URL Rewriting和ASP.NET routing(上)

新版本URL-rewrite module for IIS 7.0的发布了,ASP.NET Routing组件随 着.NET Framework 3.5 SP1的发布,并在.NET Framework 4.0 Beta中进一步成 熟.作为ASP.NET 开发人员,我们不免会对这两个功能相近的组件抱有许多疑问 ,诸如"它们有什么异同?""分别适用于什么环境?"等等.本文旨在描述这 两者之间的异同,并为开发人员提供什么时候使用哪一种解决方案的建议. 从表面上看来,这两种

ASP.NET中URL Routing和IIS上URL Rewriting的区别_自学过程

前言 前面有2篇帖子提到了关于URL Routing的特性,但是发现有很多人误会URL Routing就是URl Rewriting,其实2个虽然都提供相似的功能(提高友好的URL方便搜索引起收录),但是2者的原理和运行周期是完全不一样的,本篇文章我们就来分析一下具体有什么不同. 例子 在分析原理之前,我们先来做一个例子测试一下(IIS URL Rewrite模块需要IIS7的支持). 1.为Customer/1的URL建立对应的MVC程序 首先建立一个普通的MVC3程序,建立一个简单的Cust

在ASP.NET中实现Url Rewriting

asp.net 概要 分析如何使用微软提供的ASP.NET来对动态产生的URL地址进行网址重写. 网址重写是实现一种截取网址请求并将其进行处理后重新指向到一个指定的网址的过程.作者本人在对各种实现网址重写的技术进行研究和探讨后得出的经验和方法,希望能对您有所帮助. 内容简介 稍微花点时间看一看你做的网站里头的URL地址,你看到类似这样的地址吗http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary ?也许你

IIS URL重写模块和ASP.NET路由组件比较

随着针对IIS 7.0的URL重写模块的发布,以及在.NET框架3.5 SP1中包含了ASP.NET路由(Routing),许多ASP.NET开发人员开始质问这两种特性彼此间的关系,以及应该何时使用. Ruslan Yakushev在LearnIIS.NET上发表了一篇很有指导意义的文章. 二者本质的区别在于:IIS URL重写的处理方式比ASP.NET路由在层次上更低,对于客户端是不可见的. Ruslan给出了IIS 7 URL重写过程的可视化工作流.你可以看到URL重写模块是在请求被传递到请

asp.net Url Rewriting 地址重写方法(1/6)

在探讨如何实现网址重写这项技术之前,很有必要了解一下iis是处理所接收的web请求的机制. 当一个web请求到达iis web服务器时,iis会根据所请求的文件后缀名来决定如何处理该请求,iis可以处理诸如html页面.图片.静态内容,或者将请求转发给isapi应 用程序,由该isapi应用程序处理后生成html静态内容返回给iis,最后由iis将请求结果发送回给客户端.(一个isapi应用程序就是一套编译 好能随时在后台运行的类库,它的任务就是根据请求生成相关的内容.) 例如:如果iis接收到