1.urlrewrite简介
urlrewrite可实现动态url伪静态化,是对url地址进行重写的一个框架,比如能将地址/test/status/重写成/rewrite-status。
用struts框架做的项目,url中带有.do或.action,内行的人一瞅就知道是struts。要想知道如何去掉.do或.action,那就请看本文吧!
实现url重写的好处如下(1):
(1) 有利于搜索引擎的抓取;
(2) 简化url地址,隐藏内部url结构;
2.下载Urlrewrite
urlrewrite的下载地址: http://tuckey.org/urlrewrite/,此地址已被和谐,下载需翻墙。目前最新版本是 3.2。
下载成功后的东西是一个zip文件,即urlrewritefilter-3[1].2.0.zip。解压后有两个文件:一个是xml文件,一个是jar包,说明如下:
urlrewrite-3.2.0.jar : urlrewrite的jar包
urlrewrite.xml : urlrewrite的参考配置文件
3.urlrewrite结合项目的使用
(1)将urlrewrite-3.2.0.jar导入项目;
(2)在web.xml中加入如下内容:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(3)在项目的WEB-INF下新建xml文件,文件名必须是urlrewrite.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
<rule>
<from>^/rc/([0-9]+)$</from>
<to>/jumpSearch.do?method=toCardDetail&idtagno=$1</to>
</rule>
</urlrewrite>
注:上面的 “$1” 代表正则表达式 “([0-9]+)” , url中的 ”&” 必须用 “&” 才管用。
(4)在浏览器地址栏输入:http://www.idtag.cn/rc/90000,如果正确返回则表示成功
3.Urlrewrite.xml文件说明
(1) <urlrewrite></urlrewrite> :配置文件的根,有且仅有一个;
(2) <rule> </rule> :url重写规则的配置,至少得有一个;
(3) <outbound-rule></outbound-rule>
此和<rule></rule>正好相反,比如<rule></rule>将地址“/test/status/“重写成“/rewrite-status“,而<outbound-rule></outbound-rule>正好相反, 是将地址“/rewrite-status“重写成“/test/status/“。
相关的英文说明:The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url) the url /rewrite-status will be rewritten to /test/status/.
The above rule and this outbound-rule means that end users should never see the url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks in your pages.
(3) <name></name> : 规则名称,可选属性;
(4) <condition></condition>(1)
可对时间,方法,来源,端口,类型等进行设置,如
<condition name="user-agent" operator="notequal">Mozilla/[1-4]</condition> 客户端游览器不是Mozilla14版本以下可以访问.
<condition type="user-in-role" operator="notequal">bigboss</condition> 是bigboss不能访问.
<condition name="host" operator="notequal">www.baidu.com</condition> 主机是www.baidu.com不能访问
<condition type="method" next="or">PROPFIND</condition> 下个rule是PROPFIND可以访问
<condition type="method">PUT</condition> 是put类型
(3) <note></note> : 可选属性,相当于备注;
(2) <from></from> :自己定义的访问地址;
(3) <to type=”forward|redirect”></to> :实际访问地址。forward是默认跳转方式,此种方式下地址栏中的url不会发生变化,redirect方式地址栏url会发生变化;
参考文档:
(1) http://blog.csdn.net/skytalemcc/archive/2010/01/19/5214564.aspx ;
(2) urlrewrite官方资料