1、满足搜索引擎的要求
某些搜索引擎不能支持动态页面的抓取,大量的信息就不能被潜在用户搜索到。用UrlRewrite技术你可以把 http://server/news.asp?id=111 变成 http://server/news/111.htm 这样他们就会被搜索引擎收录了。google虽然可以抓取动态页面,但是google对动态页面的评分一般低于静态页面。所以,对大量信息发布的网站,把网站地址改变成静态的绝对是值得的。
2、隐藏技术实现,提高网站的移植性
每个页面都挂着鲜明的.asp/.jsp这种开发语言的标记,可以一眼让人看出你的网站使用什么语言做的。而且在改变网站的语言的时候,你需要改动大量的链接。而且,一个页面修改了扩展名,他的pagerank也会随之消失,从头开始。我们可以用UrlRewrite技术隐藏我们的实现细节,这样修改移植都很方便,而且完全不损失pagerank。
3、满足美感的要求
对于追求完美主义的网站设计师,即使是网页的地址也要看起来简洁明快。形如 http://server/news.asp?channel=3&id=111 的网页地址,肯定是上不了完美主义者的法眼的,用UrlRewrite技术,你可以把他变成 http://server/news/3/111.htm 。
IIS 5.0支持UrlRewrite么?
答案很简单,不支持。但是我们可以通过安装服务器扩展让IIS支持。
目前有两种产品支持IIS 5.0的UrlRewrite,isapi_rewrite 和 IIS Rewrite。
isapi_rewrite: http://www.helicontech.com/download/#isapi_rewrite
IIS Rewrite :http://www.qwerksoft.com/products/iisrewrite/download.asp
这里只有ISAPI Rewrite的一个LITE版本是免费的,其它都是trial版本。ISAPI Rewrite Lite的版本功能。
我们采用isapi_rewrite Lite Version(免费版本)。 引用:
This is simplified edition of ISAPI_Rewrite. It does not support per-virtual-site configurations, proxiing, metabase monitoring and automatic cache cleanup but all other features are supported.
所以,lite版本不支持虚拟站点配置,元数据监测和自动缓存清理。
metabase元数据:metabase 元数据库 指一个驻留内存的数据存储区域,其中存放着IIS的配置值。/Metabase是储存成System32/Inetsrv
资料夹中的Metabase.bin文件
如何进行UrlRewrite的设置?
isapi_rewrite利用正则表达式进行替换规则的表示。
下面是一个简单的例子,我想让我们的用户输入 http://server/test-12314.html 实际上访问的是 http://server/test.asp?id=12314 。那么我们的匹配表达式应该是 /test-([0-9]*).html 对应的格式化表达式应该为 /test.asp/?id=$1 。
进行正则表达式的编写的时候,可以利用isapi_rewrite提供的正则表达式测试工具(默认安装提供),进行调试。如下图:
做好了匹配表达式和格式化表达式,我们可以按照下面的格式,把它们放到安装目录下的httpd.ini里面。
格式:RewriteRule 匹配表达式 格式化表达式
刚才的例子:RewriteRule /test-([0-9]*).html /test.asp/?id=$1
文件保存后,不需重新启动iis即可生效。
----------------------------------------------------------------------------------------------------------------------------
废话少说,来个例子先:
首先引用 rulrewrite_2.6.jar 这个包把.
其次在工程web.xml 中设置filter , 添加如下:
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
再在web-inf.xml 下添加一个文件 urlrewite.xml ,内容如下:
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
- 这是一个通用请求url rewrite - 将请求forword url加上“.do”的处理器上。 - 例: -
请求 http://{domain}/user/login 将被forward到
http://{domain}/user/login.do - 请求
这样地址拦中路径为:
http://localhost:8080/Test/test/China/shanghai , 他访问的路径就成为了
http://localhost:8080/Test/test.do?country=china&city=shanghai 了.