一、引入依赖
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.4</version>
</dependency>
二、config
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.tuckey.web.filters.urlrewrite.Conf;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import java.io.IOException;
@Configuration
public class UrlRewriteConf extends UrlRewriteFilter {
private static final String URL_REWRITE = "classpath:/urlrewrite.xml";
//注入urlrewrite配置文件
@Value(URL_REWRITE)
private Resource resource;
//重写配置文件加载方式
protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
try {
//将Resource对象转换成Conf对象
Conf conf = new Conf(filterConfig.getServletContext(), resource.getInputStream(), resource.getFilename(), "@@traceability@@");
checkConf(conf);
} catch (IOException ex) {
throw new ServletException("Unable to load URL rewrite configuration file from " + URL_REWRITE, ex);
}
}
}
三、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>^/(\w+)\.html$</from>
<to>/$1/</to>
</rule>
<!-- 一个参数 -->
<rule>
<from>^/test/d-([0-9]+).html$</from>
<to>/test/test2?id=$1</to>
</rule>
<!-- 页面加载时将链接重写 -->
<outbound-rule match-type="regex">
<from>/test\?id=([0-9]+)$</from>
<to>/test/i_$1.html</to>
</outbound-rule>
<!-- 两个参数 -->
<rule>
<from>^/test/d-([0-9]+)-([0-9]+).html$</from>
<to>/test/test2?id=$1&type=$2</to>
</rule>
<!-- 两级跳转 -->
<rule>
<from>^/test/p-([0-9]+)-([0-9]+)$</from>
<to>/test/test2?p=$1&id=$2</to>
</rule>
<rule>
<from>^/test/p-([0-9]+)-([0-9]+)/i-([0-9]+).html$</from>
<to>/test/test2?id=$3</to>
</rule>
<!-- @RequestMapping("/test/{param}") -->
<!-- @PathVariable(name = "param") Integer id -->
<rule>
<from>^/test/([0-9]+).html$</from>
<to>/test/$1/</to>
</rule>
</urlrewrite>