安装
1. 下载jar包, 并加入到WEB-INF/lib下
2. 在WEB-INF/web.xml中增加下面的配置
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<!--
拦截所有的
url -->
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
3. 在WEB-INF/下增加配置文件urlrewrite.xml
4. 重启上下文环境
过滤器的参数
1. confReloadCheckInterval:
配置文件重加载间隔. 0表示随时加载, -1表示不重加载, 默认-1
2. confPath:
配置文件路径. 是相对context的路径, 默认/WEB-INF/urlrewrite.xml
3. logLevel:
设置日志级别, 可以是: TRACE, DEBUG, INFO(默认), WARN, ERROR, FATAL, log4j, commons, slf4j, sysout:{level}(比如 sysout:DEBUG), 如果你使用普通的日志级别有一定困难, 可以调为: sysout:DEBUG(表明是使用控制台输出的调试级别)
4. statusPath:
设置改变状态路径, 不能和已经安装的应用冲突(注意, 默认是/rewrite-status), 注意, 必须以/开始
5. statusEnabled:
设置status是否开启, 期望得到的值是true, false, 默认true
6. statusEnabledOnHosts:
设置允许status的主机, *可以被用作通配符, 默认是”localhost, local, 127.0.0.1”
7. modRewriteConf:
设置rewrite模式, 默认是false, 使用mod-rewrite(可以参照apache服务器的mod_rewrite相关资料)方式的配置文件, 如果设置为true并且confPath没有设置则配置文件路径将会被默认为/WEB-INF/.htaccess
8. modRewriteConfText:
从这些参数的值加从载mod_rewrite样式的配置, 设置这些参数则其他所有的参数都会被忽略. 比如:
<init-param>
<param-name>modRewriteConfText</param-name>
<param-value>
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]
</param-value>
</init-param>
9. allowConfSwapViaHttp:
设置是否允许通过HTTP方式交互设置参数, 比如, 通过调用/rewrite-status/?conf=WEB-INF/urlrewrite2.xml
配置文件WEB-INF/urlrewrite.xml
1. DTD约束
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
2. <urlrewrite />
2.1. default-match-type(可选):
2.1.1. regex, 默认. 所有未指定match-type属性的rule都使用java正则表达式进行匹配
2.1.2. wildcard: 所有未指定match-type属性的rule都使用通配符匹配引擎匹配
2.2. decode-using(可选):
2.2.1. header, utf8: 默认. 使用request.getCharacterEncoding()得到的编码对URL解码, 如果是空, 使用utf8.
2.2.2. null: 不进行解码. 设置为: decode-using=”null”
2.2.3. header: 仅仅使用request.getCharacterEncoding()解码
2.2.4. [encoding]: 仅仅使用一个指定的字符编码比如ISO-8859-1.
2.2.5. header, [encoding]: 对一个URL解码时使用request.getCharacterEncoding(), 如果得到的值为空, 则使用encoding指定的编码.
2.3. use-query-string(可选):
2.3.1. false: 默认. 在from进行匹配的时候, 查询字符串不会参加
2.3.2. true: 查询字符串参与from的匹配
2.4. use-context(可选):
2.4.1. false: 默认. from元素匹配时, application的contex路径将不会增加到url中
2.4.2. true: application的contex路径参与from元素的匹配
3. <rule />: 0个或多个
3.1. enabled(可选):
3.1.1. true: 默认.允许这个规则
3.1.2. false: 废弃这个规则
3.2. match-type(可选):
3.2.1. regex: 默认. 使用java正则匹配
3.2.2. wildcard: 使用通配符表达式引擎
4. <outbound-ruld />: 0个或多个. 和普通的rule非常相似, 但是这里是在response.encodeURL()方法调用时进行重写的.
4.1. enabled(可选):
4.1.1. true: 默认. 允许规则
4.1.2. false: 废弃规则
4.2. encodefirst(可选):
4.2.1. fasle: 默认, 在运行了encodeURL()方法之后运用这个重写规则
4.2.2. true: 在encodeURL()之前运用这个重写规则
5. <name />: 一个用于记录规则名称的可选元素, 可以在<rule />和<outbound-rule />上使用
6. <note />: 用于记录规则描述的一个简单可选元素, 可以用在<rule />和<outbound-rule />上.
7. <condition />: 针对规则的选择条件. 注意, 在规则运用的时候必须满足所有的条件.
7.1. type(可选):
7.1.1. header: 默认. 如果设置, 头名称必须通过<condition />的name属性指定
7.1.2. method: 请求方法. GET, POST, HEAD等
7.1.3. port: application运行的端口
7.1.4. time: 服务器当前时间(使用Unix时间戳), 这个通常被用于确保内容仅在设置的时间存活
7.1.5. year: 服务器的当前年
7.1.6. month: 服务器的当前月份
7.1.7. dayofmonth: 当天是一月的第几天, 每月第一天是1
7.1.8. dayofweek: 当天是一周的第几天, 星期天是7
7.1.9. ampm: 上午或下午
7.1.10. hourofday: 一天的第多少小时(24小时制)
7.1.11. minute: 当前服务器时间的分
7.1.12. second: 当前服务器时间的秒
7.1.13. millisecond: 当前服务器时间的毫秒
7.1.14. attribute: 检查request的属性(getAttribute)值, 要检查的属性名称通过<condition />的name指定
7.1.15. auth-type: 检查request属性的值. request.getAuthType
7.1.16. character-encoding: 接收到请求的编码
7.1.17. content-length: 请求的长度(对于拒绝响应大请求很有用)