手册
社区支持在可用 UrlRewrite StackOverflow上 。
读 使用的例子 和一个 样本 的 ant任务 报告。 如果你有什么建议/本手册请的例子 集团 。
安装
- 添加以下Maven依赖或添加 urlrewritefilter -
4.0.3
. jar 直接到你的 web - inf / lib 目录中。
<dependency> <groupId>org.tuckey</groupId> <artifactId>urlrewritefilter</artifactId> <version> 4.0.3 </version> </dependency>
- 添加以下你的web - inf /。 xml(添加顶部附近你的上空 servlet映射(如果你有)):(见 过滤器 参数 更多的选项)
<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-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
- 添加 urlrewrite.xml 到你的web - inf目录中。 (src / main / webapp / web - inf / Maven用户)
- 重新启动上下文。
你可以访问 http://127.0.0.1:8080 rewrite-status (或其他本地应用和上下文的地址) 看到输出(注意:这个页面才可以从localhost)。
滤波器参数
有一些先进的过滤参数启用配置文件重新加载等有不言而喻的。
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> <!-- set the amount of seconds the conf file will be checked for reload can be a valid integer (0 denotes check every time, -1 denotes no reload check, default -1) --> <init-param> <param-name>confReloadCheckInterval</param-name> <param-value>60</param-value> </init-param> <!-- if you need to the conf file path can be changed it is specified as a path relative to the root of your context (default /WEB-INF/urlrewrite.xml) --> <init-param> <param-name>confPath</param-name> <param-value>/WEB-INF/urlrewrite.xml</param-value> </init-param> <!-- sets up log level (will be logged to context log) can be: slf4j, TRACE, DEBUG, INFO (default), WARN, ERROR, FATAL, sysout:{level} (ie, sysout:DEBUG) if you are having trouble using normal levels use sysout:DEBUG (default WARN) --> <init-param> <param-name>logLevel</param-name> <param-value>DEBUG</param-value> </init-param> <!-- you can change status path so that it does not conflict with your installed apps (note, defaults to /rewrite-status) note, must start with / --> <init-param> <param-name>statusPath</param-name> <param-value>/status</param-value> </init-param> <!-- you can disable status page if desired can be: true, false (default true) --> <init-param> <param-name>statusEnabled</param-name> <param-value>true</param-value> </init-param> <!-- you may want to allow more hosts to look at the status page statusEnabledOnHosts is a comma delimited list of hosts, * can be used as a wildcard (defaults to "localhost, local, 127.0.0.1") --> <init-param> <param-name>statusEnabledOnHosts</param-name> <param-value>localhost, dev.*.myco.com, *.uat.mycom.com</param-value> </init-param> <!-- you may want to allow more hosts to look at the status page statusEnabledOnHosts is a comma delimited list of hosts, * can be used as a wildcard (defaults to "localhost, local, 127.0.0.1") --> <init-param> <param-name>statusEnabledOnHosts</param-name> <param-value>localhost, dev.*.myco.com, *.uat.mycom.com</param-value> </init-param> <!-- defaults to false. use mod_rewrite style configuration file (if this is true and confPath is not specified confPath will be set to /WEB-INF/.htaccess) --> <init-param> <param-name>modRewriteConf</param-name> <param-value>false</param-value> </init-param> <!-- load mod_rewrite style configuration from this parameter's value. note, Setting this parameter will mean that all other conf parameters are ignored. <init-param> <param-name>modRewriteConfText</param-name> <param-value> RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R] RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R] </param-value> </init-param> --> <!-- defaults to false. allow conf file to be set by calling /rewrite-status/?conf=/WEB-INF/urlrewrite2.xml designed to be used for testing only <init-param> <param-name>allowConfSwapViaHttp</param-name> <param-value>false</param-value> </init-param> --> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
注意,设置 logLevel
来 slf4j
将导致内置的日志吗 调用 slf4j 如果是日志框架, 很明显你需要的jar slf4j在您的类路径中。
配置文件web - inf / urlrewrite.xml
< urlrewrite > <规定> < outbound-rule > <类规则> <名称> <注意> <条件> 从> < <,> <设置> <运行> 返回引用 变量 功能 |
配置是通过一个简单的XML文件,在你的生活 - inf
文件夹中。 它应该叫 urlrewrite.xml。 它可能是有用的阅读 UrlRewriteFilter DTD (文档类型定义) 。 也请确保你看看 例子 。 一个简单的 配置文件的样子:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd"> <urlrewrite> <rule> <from>^/some/olddir/(.*)$</from> <to type="redirect">/very/newdir/$1</to> </rule> <rule match-type="wildcard"> <from>/blog/archive/**</from> <to type="redirect">/roller/history/$1</to> </rule> </urlrewrite>
urlrewrite。 xml文件必须有一个根元素称为“urlrewrite”和必须包含 至少有一个元素“规则”。
一个“规则”必须包含一个“从”和“来”,并且可以有零个或多个“条件”元素和零个或多个和/或 “套”元素。
当一个“规则”对传入请求处理,必须满足所有的“条件”元素,然后 “从”将被应用到生成的URL请求URL和最终应用 “,”“从”模式。 只要规则匹配的“设置”将会运行。
当执行一个规则过滤器(非常简单)将遍历每个做的所有规则和推出这样的伪代码:
Pattern.compile(<from> element); pattern.matcher(request url); matcher.replaceAll(<to> element); if ( <condition> elements match && matcher.find() ) { handle <set> elements (if any) execute <run> elements (if any) perform <to> element (if any) }
< urlrewrite >元素
顶级元素。
属性 | 可能值 | 解释 |
---|---|---|
default-match-type (可选) | 正则表达式 (默认) | 所有规则和他们的条件将被处理(除非使用Java正则表达式引擎 平衡式 指定一个规则)。 |
通配符 | 所有规则和他们的条件将加工使用 通配符表达式 引擎 (除非 平衡式 指定一个规则)。 | |
解码时 (可选) | 头,utf8 (默认) | 当URL解码request.getCharacterEncoding()将被使用,如果是空将使用utf - 8。 |
零 | 不解码。 (注意,这意味着零如文字字符串解码时=“零”) | |
头 | 只使用request.getCharacterEncoding()解码。 | |
(编码) | 只使用一个特定的字符编码如iso - 8859 - 1。 看到 Java字符集对象 所有的字符编码。 | |
头,(编码) | 当URL解码request.getCharacterEncoding()将被使用,如果是空的一个特定的字符 编码如iso - 8859 - 1。 看到 Java字符集对象 所有的字符编码。 | |
use-query-string (可选) | 假 (默认) | 查询字符串将 不 被附加到url元素与“从”。 |
真正的 | 将附加到url查询字符串的匹配对“从”元素。 | |
使用环境 (可选) | 假 (默认) | 上下文路径将 不 被添加到“从”元素匹配的url。 |
真正的 | 上下文的url路径将被添加到“从”元素匹配。 |
<规定>元素
零个或更多。 一个规则的基础。
属性 | 可能值 | 解释 |
---|---|---|
启用 (可选) | 真正的 (默认) | 启用该规则。 |
假 | 禁用此规则。 | |
平衡式 (可选) | 正则表达式 (默认) | 这条规则的条件将使用Java正则表达式引擎处理。 |
通配符 | 这条规则将被处理使用的条件 通配符表达式引擎 。 |
下面的示例请求 /世界/美国/纽约
将透明转发吗 / world.jsp
<rule match-type="regex"> <from>^/world/([a-z]+)/([a-z]+)$</from> <to>/world.jsp</to> </rule>
<rule match-type="wildcard"> <from>/world/*/*</from> <to>/world.jsp</to> </rule>
< outbound-rule >元素
零个或更多。 这非常类似于一个正常的规则,但用于重写url response.encodeURL()
。
属性 | 可能值 | 解释 |
---|---|---|
启用 (可选) | 真正的 (默认) | 启用该规则。 |
假 | 禁用此规则。 | |
encodefirst (可选) | 假 (默认) | 运行encodeURL() 后 运行此出站规则。 |
真正的 | 运行encodeURL() 之前 运行此出站规则。 |
可能包含“运行”,“从”,“对”和“设置”元素(s)。 例子:
<outbound-rule> <from>^/world.jsp?country=([a-z]+)&city=([a-z]+)$</from> <to>/world/$1/$2</to> </outbound-rule>
使用上面的示例JSP的代码 < a href = " < % = response.encodeURL(“/ world.jsp ?国家= usa&城市=纽约”) 纽约% > " > < / >
将输出 < a href = " /世界/美国/纽约" >纽约< / >
或JSTL < a href = " < c:url value = " / world.jsp ?国家= $ { }的国家和城市= $ { }城” 纽约/ > " > < / >
将输出 < a href = " /世界/美国/纽约" >纽约< / >
请注意,如果您正在使用JSTL(即< c:url)这将工作。
<名称>元素
一个可选元素用于记录规则的名称。 这可以使用规则,outbound-rule。 看到 ant任务 。
<rule> <name>World Rule</name> <from>^/world/([a-z]+)/([a-z]+)$</from> <to>/world.jsp?country=$1&amp;city=$2</to> </rule>
<注意>元素
一个简单的可选元素用于文档的规则。 这可以使用规则,outbound-rule。 看到 ant任务 。
<rule> <name>World Rule</name> <note> Cleanly redirect world requests to JSP, a country and city must be specified. </note> <from>^/world/([a-z]+)/([a-z]+)$</from> <to>/world.jsp</to> </rule>
<条件>元素
一个元素,让你选择条件规则。 注意,所有条件必须得到满足的规则运行 (除非“下一个”设置为”或“举例)。
值可以是任何 正则表达式 。