首页 / 网页编程 / ASP.NET / IIS URL Rewriting和ASP.NET routing(下)
IIS URL Rewriting和ASP.NET routing(下)2011-05-27 博客园 Lance Zhang在IIS URL Rewriting 和 ASP.NET routing(上)中,我们针对IIS URL Rewriting 和 ASP.NET routing的理念和功能分别进行分析并进行对比,在清楚 了这些基本原理和异同之后,我们该如何在应用中挑选合适的URL优化方案呢? 在本文中,我们将对此进行探讨分析,并例举几种两者协同应用的案例。我们该如何选择?首先,如果我们的Web应用程序有任何除了ASP.NET之外的动态网页技术,那 么选择是绝对明显的:用IIS URL重写模块(IIS URL-rewrite module)。否则 的话,主要判断规则如下:1. 如果我们的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应用程序了。详见此地。2. 如果我们是基于一个已有的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>