首页 > 其他分享 >[urlrewrite]使用urlrewrite进行地址自动重定向

[urlrewrite]使用urlrewrite进行地址自动重定向

时间:2023-08-28 14:02:49浏览次数:45  
标签:重定向 配置文件 rewrite xxx 默认 地址 设置 urlrewrite


一般通过url访问网站,url的格式都是

http://xxx.xxx.com?param=p1&param=p2

 这是最传统的访问方式,但是,对于一些具有特殊要求的系统,其所有的页面的地址并不一定是这样子的格式,或者是类似于struts风格的.do的方式,比如

http://xxx.xxx.com/aa.do

其中的aa并不是action映射名称,而是其中一个默认key的参数,比如在一些个人主页类型的系统中,如

http://xxx.xxx.com/quzishen --> 其实这样做背后我们真正希望的url是

http://xxxx.xxx.com/blog/personal.do?name=quzishen

这样访问系统,我们希望也能够被系统自动解析并正处处理,该如何做呢?

其中的一种方式,就是进行url的重定向,这里我们介绍使用urlrewirete来实现。

---------------------------------------------------------------------------------------

1、首先,下载urlrewrite-2.6.0.jar放到WEB-INF/lib下。下载地址

2、你需要在web.xml中进行配置urlrewrite的filter,这样请求才能被urlrewrite过滤并处理,配置方式跟普通filter无区别

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <init-param>
        <param-name>confReloadCheckInterval</param-name>
        <param-value>500000</param-value>
    </init-param>
    <init-param>
            <param-name>logLevel</param-name>
            <param-value>sysout:ERROR</param-value>
    </init-param>
</filter> 
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

其中,filter的参数如下(摘自文档),如果你只是想快速应用到系统中,可以暂时滤过下面内容。有空再好好研究即可。

1. confReloadCheckInterval: 配置文件重加载间隔. 0表示随时加载, -1表示不重加载, 默认-1

2. confPath: 配置文件路径. 是相对context的路径, 默认/WEB-INF/urlrewrite.xml

3. logLevel: 设置日志级别, 可以是: TRACE, DEBUG, INFO(默认), WARN, ERROR, FATAL, log4j, commons, slf4j, sysout:{level}(比如 sysout:DEBUG), 如果你使用普通的日志级别有一定困难, 可以调为: sysout:DEBUG(表明是使用控制台输出的调试级别)

4. statusPath: 设置改变状态路径, 不能和已经安装的应用冲突(注意, 默认是/rewrite-status), 注意, 必须以/开始

5. statusEnabled: 设置status是否开启, 期望得到的值是true, false, 默认true

6. statusEnabledOnHosts: 设置允许status的主机, *可以被用作通配符, 默认是”localhost, local, 127.0.0.1”

7. modRewriteConf: 设置rewrite模式, 默认是false, 使用mod-rewrite(可以参照apache服务器的mod_rewrite相关资料)方式的配置文件, 如果设置为true并且confPath没有设置则配置文件路径将会被默认为/WEB-INF/.htaccess

8. 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>


 

9. allowConfSwapViaHttp: 设置是否允许通过HTTP方式交互设置参数, 比如, 通过调用/rewrite-status/?conf=WEB-INF/urlrewrite2.xml

3、在WEB-INF下新建urlrewrite的配置文件 urlrewrite.xml (默认的名称,如果更改,需要跟上述配置中classpath进行匹配)


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
        "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

<urlrewrite>
  <rule>
    <from>/blog/(.*)</from>
    <to>/blog/personal.do?name=$1</to>
  </rule>
</urlrewrite>


 

具体项目的配置,可以参见文章

至此配置已经全部结束,但是你可能想测试一下,自己的配置是否有问题,能否像测试java代码一样来通过单元测试完成这个过程?当然可以!

4、测试配置

编写单元测试类

public class UrlRewriteConfigurationTest extends TestCase{
	private static final Logger log = Logger.getLogger(UrlRewriteConfigurationTest.class);
	private static final String REWRITE_CONF = "urlrewrite.xml";
	private Conf conf;
	private UrlRewriter rewriter ;
	protected void setUp() {
		InputStream istream = getClass().getResourceAsStream("/"+REWRITE_CONF);
		conf = new Conf(istream, REWRITE_CONF);
		rewriter = new UrlRewriter(conf);
	}

	private String rewireteUrl(String fromUrl)throws Exception{	    	
		MockRequest request = new MockRequest(fromUrl);
		MockResponse response = new MockResponse();
		RewrittenUrl rewrittenUrl = rewriter.processRequest(request, response);
		if (rewrittenUrl==null) return "failed";
		String rewrittenUrlString = rewrittenUrl.getTarget();
		return rewrittenUrlString;
	}

	public void testRewrite() throws Exception {
		String fromUrl="http://xxx.xxx.com/quzishen";
		rewireteUrl(fromUrl);
	}
}

 

通过单元测试,可以快速知道自己配置是否会有问题。至此全部完成。

标签:重定向,配置文件,rewrite,xxx,默认,地址,设置,urlrewrite
From: https://blog.51cto.com/u_16237557/7263434

相关文章

  • 05 地址解析协议ARP
    地址解析协议(ARP)ARP(AddressResolutionProtocol)地址解析协议:根据已知的IP地址解析获得其对应的MAC地址ARP工作流程1.HOST1ARP缓存HOST1通信之前需要封装数据包,其中在封装二层数据链路层时,终端查询自己的ARP缓存表,ARP缓存表维护一个IP和MAC地址的对应关系,根据对端IP地......
  • Java-UrlRewrite中文官方文档
    安装1.下载jar包,并加入到WEB-INF/lib下2.在WEB-INF/web.xml中增加下面的配置<filter><filter-name>UrlRewriteFilter</filter-name><filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class></filter><filter-mappin......
  • Linux 查看IP地址 的6种方法
    6种方法在Linux系统中查看IP地址在terminal输入命令或ifconfig或ipaddr或ipaddress或ipaddrshow或ipaddressshowifconfig命令:在终端输入ifconfig命令,它会显示当前系统中所有网络接口的配置信息,包括IP地址、子网掩码和网关等。ip命令:在终端输入ipaddr命令,它会列出当......
  • 实用指令_文件目录类_重定向
    >指令和>>指令输出重定向>和追加>>基本语法ls-l>文件(功能描述:列表中的内容写入文件(覆盖写))ls-al>>文件(功能描述:列表中的内容追加到文件的末尾)cat文件1>文件2(功能描述:文件1的内容覆盖到文件2中)echo"内容">>文件应用实例###eg1:将home目录下......
  • 网工学习(四)---IP地址相关概念
    子网掩码参考网址-https://blog.csdn.net/pagnzong/article/details/112737814不能单独存在,必须结合IP地址一起使用作用:划分子网,将某个IP地址划分为网络地址和主机地址两部分通俗理解:就是小区,就是电话区号,用来标识网络位表示方法-二进制 -11111111111111......
  • IP地址后面的/24是什么意思?
    IP地址后面的/24是什么意思?一、/24的含义ip地址后面的斜杠24表示掩码位是24位的,即用32位二进制表示的子网掩码中有连续的24个“1”:11111111111111111111111100000000,将其转化为十进制,就是:255.255.255.0了。二、什么是IP地址IP地址是指互联网协议地址,是IP协议提供的一种统......
  • vue项目打包之后, 生成一个可修改IP地址的文件
     在做项目的时候遇到了一个问题,就是把项目部署到不同的服务器上,但不能每次修改IP的时候就打包一次,这就增加了前端的工作量,经过百度,发现有一些方法是可以的,亲测可用。具体操作是,1,在static文件夹下面建立一个config.js文件, 1234567(function (){ ......
  • 网络规划设计师真题解析--IP地址(二)
    地址202.118.37.192/26是(25),地址192.117.17.255/22是(26)。(2018年真题)(25)A.网络地址B.组播地址C.主机地址D.定向广播地址(26)A.网络地址B.组播地址C.主机地址D.定向广播地址答案:(25)A(26)C解析:(25)202.118.37.192/26,建网比特数为/26,前三字节为24位,光看最后一字节192......
  • openresty中几种重定向的差异比较(ngx.redirect、ngx.req.set_uri、ngx.exec)
    一.测试用的nginx.conf: userroot;worker_processes1;error_loglogs/error.log;events{worker_connections1024;}http{charsetutf-8;default_typeapplication/octet-stream; include/usr/local/openresty/nginx/conf/mime.typ......
  • c# Htpp遇到307重定向,二次请求时不会附带请求头部信息
    情况:Get请求需要添加Token获取数据;问题1:postman请求可以成功返回json数据,但是c#(HttpCilent、RestClient)程序请求时提示”token无效“;原因:postman和c#(HttpCilent、RestClient)遇到重定向时都会自动二次请求但是c#二次请求时不会附带第一次请求的头部信息,而postman会;解决方案:......