考虑使用urlrewrite的原因有两个:一是美化地址栏隐藏原有的真实地址,二是实现伪静态化有利于搜索引擎收录。
举个栗子:
Link-Nemo的首页的某个文章的地址为:
https://www.link-nemo.com/Kira/article/detail.do?a=pk3vcxFntjIwcKPEpbn
使用urlrewrite之后,访问地址可以是:
https://www.link-nemo.com/Kira/article/pk3vcxFntjIwcKPEpbn.html
具体实现:
在maven中添加依赖
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>3.1.0</version>
</dependency>
而后在web.xml中配置拦截器拦截:
<!-- 加到任何servlet映射的顶部,不然可能有些路径不能被过滤到
http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/index.html
-->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<!--
设备文件重加载间隔 (0默示随时加载, -1默示不重加载, 默认-1)
-->
<init-param>
<param-name>confReloadCheckInterval</param-name>
<param-value>60</param-value>
</init-param>
<!-- 自定义配置文件的路径,是相对context的路径,(默认位置 /WEB-INF/urlrewrite.xml) -->
<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/urlrewrite.xml</param-value>
</init-param>
<!--
设置日志级别(将被记录到日志中)
可以为: TRACE, DEBUG, INFO (default), WARN, ERROR, FATAL, log4j, commons, slf4j,
比如 sysout:DEBUG(设置到控制台调试输出级别)
(默认级别 WARN) -->
<init-param>
<param-name>logLevel</param-name>
<param-value>DEBUG</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
最后还需要一个配置,在WEB-INF/下新建urlrewrite.xml文件,在其中写上转发规则,这里可以添加多个规则,方便起见,先写上一个做测试:
<?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>/page/(.*).html</from>
<to>/page.do?id=$1</to>
</rule>
</urlrewrite>
大体也就是这样了。
最后的结果是:
当访问/page/1.html的时候,实际请求会被转发到page.do?id=1
至此站点的伪静态就算做完了。