前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >伪静态转发Url Rewrite 3.2.0中文操作手册

伪静态转发Url Rewrite 3.2.0中文操作手册

作者头像
小柒2012
发布2018-04-16 14:47:20
1.2K0
发布2018-04-16 14:47:20
举报
文章被收录于专栏:IT笔记IT笔记

手册

由于历史原因,旧版系统采用的struts2框架。基于Action命名以及菜单规范的问题,故临时采用了额Url Rewrite相关功能实现。

本文档基本3.2.0版本。原文请参阅:http://tuckey.org/urlrewrite/manual/3.2/index.html

timg.jpg
timg.jpg

timg.jpg

部署

下载zip并将解压,把urlrewrite.xml放到项目WEB-INF目录下。 把下面的代码添加到WEB-INF/web.xml中:

代码语言:javascript
复制
<!-- 伪静态转发 -->
    <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>
        <init-param>    
            <description>是否可以重新载入</description>    
            <param-name>confReloadCheckEnabled</param-name>    
            <param-value>true</param-value>    
        </init-param>     
        <init-param>
           <description>设置配置文件重新加载的间隔时间,以秒计。必须是一个合法的整数(0表示每次修改都检查,-1表示不做重新加载检查)</description>
           <param-name>confReloadCheckInterval</param-name>
           <param-value>0</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为log4j或者commons将导致日志构建时调用log4j或commons-loggin类库。因此,需要把相关jar引入到classpath中。

过滤器参数

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
    </filter-class>

    <!-- 设置配置文件重新加载的间隔时间,以秒计,必须是一个合法的整数(0表示每次修改都检查,-1表示不做重新加载检查,默认为-1) -->
    <!-- 源码中默认值为0 -->
    <init-param>
        <param-name>confReloadCheckInterval</param-name>
        <param-value>60</param-value>
    </init-param>

    <!-- 如果需要求给配置文件的路径,可以通过confPath参数,路径相对于上下文跟目录(默认为/WEB-INF/urlrewrite.xml) -->
    <init-param>
        <param-name>confPath</param-name>
        <param-value>/WEB-INF/urlrewrite.xml</param-value>
    </init-param>

    <!-- 设置日志级别,可选值为 TRACE, DEBUG, INFO(默认), WARN, ERROR, FATAL; 日志系统可选 log4j, 
        commons, slf4j; -->
    <init-param>
        <param-name>logLevel</param-name>
        <param-value>DEBUG</param-value>
    </init-param>

    <!-- 你可以修改urlrewrite状态数据的目录,以便它不与你已部署的应用相冲突(注:默认为/rewrite-status) ,注:必须以/开头 -->
    <init-param>
        <param-name>statusPath</param-name>
        <param-value>/status</param-value>
    </init-param>

    <!-- 可以禁用状态页面,可选值为true/false,(默认为true) -->
    <init-param>
        <param-name>statusEnabled</param-name>
        <param-value>true</param-value>
    </init-param>

    <!-- 你可能想允许其他的host也可以看到状态页,可以用statusEnabledOnHosts参数来配置,值为,隔开的host列表,可使用*号通配符(默认为"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>

    <!-- 默认false. 使用mod_rewrite风格的配置文件(若设置为true,则confPath没有被指定时会会设置为/WEB-INF/.htaccess) -->
    <init-param>
        <param-name>modRewriteConf</param-name>
        <param-value>false</param-value>
    </init-param>

    <!-- 从参数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>
    -->

    <!-- 默认为false, 允许通过访问下面的url设置使用哪个配置文件/rewrite-status/?conf=/WEB-INF/urlrewrite2.xml。仅为测试方便而设计 
    <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>

配置文件

代码语言:javascript
复制
<?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>^/resource/resource_list.html</from>
        <to>/resource/resource_list.jsp?type=0</to>
    </rule>
    <!--默认是正则匹配  match-type="wildcard" 通配符匹匹配  -->
    <rule match-type="wildcard">
        <!-- 预支付 -->
        <from>/pay/prepay/*</from>
        <to>/pay_prepay.action?studentId=$1</to>
    </rule>
</urlrewrite>

urlrewrite.xml 这个配置文件一定只能放在 WEB-INF 下。

所谓重写,就一定会有规则的匹配,这里用到了正则表达式,方便起见,我只用了[A-Za-z0-9]+,简单的解释一下:

A-Z:匹配 A 到 Z 中的任意一个字符,说一句废话,同理可得,

a-z:匹配 a 到 z 中的任意一个字符

0-9:匹配 0 到 9 的任意一个字符

+:至少出现一次,即,一次或一次以上

合起来 [A-Za-z0-9]+ 的意思就是:匹配一个任意的英文字母和数字组合的字符串

rule:自定义匹配规则

note:注释,解释标签

from:定义具体的匹配规则

to:匹配成功后的目标地址

type:type的值有两个,一个是 forward (转发,参数不丢失),一个是 redirect (重定向,地址栏显示的地址就是目标真实地址)

$1:匹配中的第一个正则表达式的字符串的值,$2,$3,$4....也是如此

& amp; :是 & 的实体名,代表的就是 &。

源码

截取过滤器部分源码,便于大家理解。 org.tuckey.web.filters.urlrewrite.UrlRewriteFilter:

代码语言:javascript
复制
public class UrlRewriteFilter implements Filter {
    private static Log log = Log.getLog(UrlRewriteFilter.class);
    public static final String VERSION = "3.2.0";
    public static final String DEFAULT_WEB_CONF_PATH = "/WEB-INF/urlrewrite.xml";
    private UrlRewriter urlRewriter;
    private boolean confReloadCheckEnabled;
    private int confReloadCheckInterval;
    private boolean allowConfSwapViaHttp;
    private long confLastLoad;
    private Conf confLastLoaded;
    private long confReloadLastCheck;
    private boolean confLoadedFromFile;
    private String confPath;
    private boolean confReloadInProgress;
    private boolean statusEnabled;
    private String statusPath;
    private boolean modRewriteStyleConf;
    public static final String DEFAULT_MOD_REWRITE_STYLE_CONF_PATH = "/WEB-INF/.htaccess";
    private ServerNameMatcher statusServerNameMatcher;
    private static final String DEFAULT_STATUS_ENABLED_ON_HOSTS = "localhost, local, 127.0.0.1";
    private ServletContext context;

更多:http://www.gaofi.cn/article/detail/84

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 手册
  • 部署
  • 过滤器参数
  • 配置文件
  • 源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档