UrlRewriter技术简单运用

来源:互联网 发布:邮箱域名注册 编辑:程序博客网 时间:2024/05/23 18:32
http://blog.csdn.net/weijie_search/archive/2008/07/25/2711041.aspx
如何增强你网站中地址的可读性和让搜索引擎快速的收录到你的站点,这就需要你美化你的网页的地址,也就是我们常说的Url 重写技术,大家熟悉的可能有很多服务器都提供Url重写的技术,以前我们用的最多的就是Apache,Jboss这样一些服务器自带的一些Url重写,但是他们的配置比较麻烦,性能又不是太好,现在我们有专一的开源框架来完成Url重写任务,今天我要介绍的就是UrlRewriter。使用起来比较简单,配置是相当的简单明了。

我们先简单的了解一下使用Url重写能给你网站带来哪些好处。
第一:有利于搜索引擎的抓取,因为现在大部分的搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态的页面。而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面,有利于搜索引擎的抓取。

第二:让用户更容易理解,很少有用户去关心你网站的页面的地址,但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。

第三:隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术,给一些想攻击你网站的爱好者提供方便。

第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。这样就提高了网站的移植性。

它虽然有这么多的优点,但是也有一点缺点的,因为它是通过过滤器原理来实现的,就以为着又多了一道访问,会多少影响点访问速度的,这个可以忽略不计的。
现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。
首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter) ,看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().

下面我们就快速的为你的网站搭建Url重写技术
第一步:下载urlrewrite-2.6.0.现在最新版本是3.1的。(http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip
http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip把urlrewrite-2.6.0.jar拷到classpath下。
第二步:在WEB-INF目录下建一个urlrewrite.xml文件。
第三步:在web.xml中初始化。加上下面的代码:
  1.   <!-- Set URL Rewrite-->  
  2. <filter>  
  3.  <filter-name>UrlRewriteFilter</filter-name>  
  4.  <filter-class>  
  5.   org.tuckey.web.filters.urlrewrite.UrlRewriteFilter   
  6.  </filter-class>  
  7. </filter>  
  8. <filter-mapping>  
  9.  <filter-name>UrlRewriteFilter</filter-name>  
  10.  <url-pattern>/*</url-pattern>  
  11. </filter-mapping>  

最后我要简单的讲一下常用的两个配置规则.以下就是简单的urlrewrite.xml配置片段。不要习惯Java的命名法把它写成urlRewrite.xml,这样即使你加上
  1. <init-param>  
  2.    <param-name>confPath</param-name>  
  3.    <param-value>/WEB-INF/urlRewrite.xml</param-value>  
  4.  </init-param>  

在启动的服务器的时候还是会报错的,因为源码中必须是全小写的(urlrewrite.xml)且只能放到WEB-INF下面。
  1.     <?xml version="1.0" encoding="utf-8"?>  
  2. lt;!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"   
  3.        "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">  
  4. lt;urlrewrite>  
  5.  <rule>  
  6.  <from>^/(/w+)/(/w+)/page_(/d+)/.html$</from>  
  7.  <to type="forward">/$1.htm?category=$2&page=$3</to>  
  8. </rule>  
  9.  <rule>  
  10.     <from>^/rss/yahoo/.html$</from>  
  11.       <to type="redirect">http://add.my.yahoo.com/rss?url=http://feed.feedsky.com/W3CSSiteFeed   
  12.      </to>  
  13. </rule>  
  14. lt;/urlrewrite>  

所有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。
  1. <rule>  
  2.   <from></from>  
  3.   <to type="forward></to>  
  4. </rule>  

<from></from>写上你自己定义的访问地址,<to type="forward></to>就是实际的访问地址。比如我们实际的访问地址是:http://yousite.com/entity.htm ?category=user&page=2.而我们想把它重写为http://yousite.com/entity/uesr/page_2.html。这样看起来比我们实际的要好看的多。我们就应该这样的写:
  1. <rule>  
  2.   <from>^/(/w+)/(/w+)/page_(/d+)/.html$</from>  
  3.   <to type="forward">/$1.htm?category=$2&page=$3</to>  
  4.  </rule>  

简单的介绍一下常用的正规表示式:
代码 说明
. 匹配除换行符以外的任意字符
/w 匹配字母或数字或下划线或汉字
/s 匹配任意的空白符
/d 匹配数字
/b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
常用的&要用 &来表示。$1,$2代表与你配置正规表达式>/(/w+)/(/w+)/相对应的参数。<to type="forward">默认的是 type="forward".
另一个常用的规则就是连接外部的网站。就要用到。<to type="redirect">
  1. <rule>  
  2.      <from>^/rss/yahoo/.html$</from>  
  3.        <to type="redirect">http://add.my.yahoo.com/rss?url=http://feed.feedsky.com/MySiteFeed   
  4.       </to>  
  5.  </rule>