urlrewrite基本介绍

时间:

what is urlrewrite ?

UrlRewrite就是我们通常说的地址重写,可实现网页的伪静态化。

example: 浏览器请求:http://localhost/hello.html 服务器将把这个请求重定向为:http://localhost/helloAction?method=hello

why is it ?

  • 一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多;
  • 二:美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL;
  • 三:更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息;

usual urlrewrite tool

大多数的javaweb框架如springMVC、struts都支持url重写,但是不够灵活。 tuckey urlrewrite 下载地址http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip

usage mode

  • 在web.xml中加入拦截器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >     <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>
    > <dispatcher>REQUEST</dispatcher>
    > <dispatcher>FORWARD</dispatcher>
    > </filter-mapping>
    >
  • 在WEB-INF目录下创建urlrewrite.xml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
> <?xml version="1.0" encoding="utf-8"?>
> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite3.2//EN""\\urlrewrite3.2.dtd">
> <urlrewrite>
> <rule>
> <note>123</note>
> <note>123</note>
> <from>/([A-Za-z0-9]+).action</from>
> <to type="forward">/view/$1.jsp</to>
> </rule>
> ...
> <rule></rule>
> </urlrewrite>
>
  • 对urlrewrite.xml节点的简介

    需要转化的链接不能直接写在a标签中,需要写在c:url或其他服务器需要解析的变量中,这样才能对其重 新显示

    note:注释你所配置的信息(可有多个)

    from:代表你在访问网站的时候,浏览器地址栏中显示的URL

    to:代表将浏览器中显示的URL转换后的地址,也就是你网站中真正访问的URL

    example:

1
2
3
4
5
>     <rule>
> <from>^/page/(.*)$</from>
> <to>/page/$1.jsp</to>
> </rule>
>
1
2
我们访问 http://localhost:8080/first 
而实际我们访问的是http://localhost:8080/first.jsp

注意事项

  • urlrewrite.xml是utf-8.所以如果你要在rule上加note标签为中文的话,也一定是要utf-8.
  • UrlRewriteFilter 最好是配置在web.xml的前面filter上,不然有可能对有些url转变失去作用.
  • urlrewrite属性:有仅只有一个,rule属性::至少一个.
  • 在写rule的时,如果有多个参数时,中间的连接符号&应该是&
  • 对于中文参数要使用(.*)作为参数转义.
  • 具体DTD解释请参考:http://wenku.baidu.com/view/e9a44a3467ec102de2bd89fc.html?re=view
  • tuckey urlrewrite官网:http://tuckey.org/urlrewrite
web