什么是urlrewrite

UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址。

比如:http://www.mpabo.com/?p=123 使用UrlRewrite转换后可以显示为 http://www.mpabo.com/123.html

如何实现UrlRewrite,看这里tuckey urlrewritefilter 为什么要用UrlRewrite呢?
(以下来自于http://li-jian0812-126-com.iteye.com/blog/228459)

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 。

tuckey urlrewritefilter的配置

最近在写个小东西,用到了urlrewrite,使用的是tuckey 的urlrewirefilter

下面就说说urlrewritefilter的配置,首先在web.xml中配置filter,定义要过滤的url,注意filter的位置。(官网上面也有的,可以点上面的链接看。)

urlrewritefilter默认会加载urlwrite.xml,所以在WEB-INF目录下创建urlrewrite.xml,使用下面的配置

就可以了。具体的语法可以参考https://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.0/index.html

最开始配置使用的是4.0版本的dtd,即

发现访问静态资源全部找不到,后台打印的url全部被加了前缀 mpabo, 比如访问的链接是 /css/css.css 会变成 /mpabo/css/css.css

应该是

这规则生效导致的。后来尝试使用3.0的版本,竟然没问题。然后对比了下3.0的dtd和4.0的dtd,发现有个属性不一致,就是to的last, 3.0 默认是 true,4.0 默认为false, 又看了4.0文档的语法

last (optional)  :   false (default) The rest of the “rules” will be processed if this one succeeds.   (true No more “rules” will be processed if this one is a match.)

由于

这规则在最后面,所以即使前面的规则匹配了,但还是被覆盖了。所以解决方法就是改为3.0的dtd,或者在增加last=”true”。看个人喜好了。

再重新去看了下3.0的文档发现last写的竟然也是 false(default),但dtd的定义里面是true,坑人啊。

附3.0的dtd, to的定义: