URL地址重写

现在大部分的网站和商城都会使用到URL重写,接触到这个,也是因为正在做的电子商务商城。URL重写,是将原有的URL采用另一种规则来显示,使得用户方便访问同时也屏蔽一些信息。

在此说下它的好处,在开发过程中,经常会遇到一些带了一大堆参数的URL,这样子,一方面显得烦乱,另一方面,一些信息直接显示在URL上,会有些安全性问题。使用URL重写,可以使带有参数的URL以一种较规则的方式体现,如:

/demoAction?id=1            ==>            /demo1.html

它也将本该在URL上显示出来的传参给隐蔽起来,隐藏了技术实现和敏感信息。另外,URL重写,也有利于搜索引擎的访问。

最近项目接触到的URL重写采用的是UrlRewrite,它主要是采用Filter技术在用户请求的时候对访问的URL进行处理,来实现重写的作用。

以下是UrlRewrite的使用实例(个人认为,UrlRewrite的官方文档写的还是比较全面易懂的)

UrlRewrite的导入:

UrlRewrite的导入非常简单,首先需在项目的lib文件夹中加入urlrewrite-3.2.0.jar包,然后,在web.xml中声明Filter

 1 <filter>
 2         <filter-name>UrlRewriteFilter</filter-name>
 3         <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
 4     </filter>
 5     <filter-mapping>
 6         <filter-name>UrlRewriteFilter</filter-name>
 7         <url-pattern>/*</url-pattern>
 8         <dispatcher>REQUEST</dispatcher>
 9         <dispatcher>FORWARD</dispatcher>
10     </filter-mapping>
11     

声明完filter后,需要在WEB-INF目录下新建一个urlrewrite.xml文件

1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE urlrewrite
3 PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
4 "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
5 <urlrewrite>
6
7
8 </urlrewrite>

该文件是UrlRewrite的规则制定文件,后续主要通过配置它来进行URL的重写。

至此,UrlRewrite的导入就完成了

UrlRewrite 导入成功后,接下来主要通过在urlrewrite.xml添加规则,就能实现URL的重写了。在此列举一些常用的规则。

1 <rule>
2         <from>^/demo/(\w+).html$</from>
3         <to type="redirect">/Struts/$1</to>
4 </rule>

rule 是urlrewrite下的子节点,是urlrewrite的主要规则节点,在它里面包含from 和to两个子节点,from表示请求的URL,to表示将转到的真实的URL。关于from,UrlRewrite有两种匹配的模式,一种是正则表达式匹配,一种的通配符匹配,如上就是正则表达式匹配。当进行匹配的时候,匹配部分的正则可以被提取为参数进行传递

如上规则设置,当客户端访问的网址是http://127.0.0.1:8080/Struts/demo/hello.html  的时候,因为匹配部分是hello,所以它跳转到的是http://127.0.0.1:8080/Struts/hello 上。当网址规则中有多个正则的时候,匹配的参数也会随之增加。如:

1 <rule>
2         <from>^/demo1/(\w+)/(\w+).html$</from>
3         <to type="redirect" >/Struts/$1.action?age=$2</to>
4 </rule>

rule 的默认匹配方式是正则表达式,但是,有时候也可以以通配符的形式进行匹配。在编写规则的时候,只需要在rule添加一个match-type="wildcard" 的属性即可。

1 <rule match-type="wildcard">
2         <from>/demo2/*/*</from>
3         <to type="redirect">/Struts/$1.action?age=$2</to>
4 </rule>

关于to节点,UrlRewrite提供了多种网址跳转方式,如forward和redirect,这两种方式,和大部分MVC框架提供的功能一样,在此不再赘述。

除了支持指定规则的跳转外,UrlRewrite还支持当匹配规则的时候执行某个对象的某个函数

1 <rule>
2         <from>^/demo3/(\w+)/(\w+).html$</from>
3         <run class="com.sean.action.Demo" method="log" />
4         <to type="redirect" >/Struts/$1.action?age=$2</to>
5 </rule>

如上述设置,要实现匹配规则是执行某个函数,需要添加多一个run节点,在节点上面添加对应的类属性和方法属性。同时,对应的类必须继承RewriteRule类,执行的方法必须传入两个参数,分别是HttpServletRequest 和HttpServletResponse

 1 public class Demo extends RewriteRule{
 2
 3     public void log(HttpServletRequest request,HttpServletResponse response){
 4         System.out.println("haha1");
 5     }
 6
 7     public void log2(HttpServletRequest request,HttpServletResponse response){
 8         System.out.println("haha2");
 9     }
10 }

这样,当客户端输入的网址第一次匹配到指定规则的时候,UrlRewrite就会执行对应的函数,该函数只在第一次匹配成功的时候执行。

如果想要每次匹配规则都执行某函数,可以在urlrewrite添加class-rule子节点,该节点设置后,每次匹配规则后,指定的函数都会执行一次。

1 <class-rule class="com.sean.action.Demo" method="log2"/>

除了对请求的URL进行处理外,UrlRewrite还提供了对返回页面中的地址进行重写的功能。使用rule是对用户输入的url进行处理,但是开发过程中,经常需要在页面中也添加一些网址请求,UrlRewrite可以通过规则,对页面中的网址也进行重写。如:

1 <outbound-rule match-type="regex">
2         <from>/(\w+).action\?id=(\w+)$</from>
3         <to>/$1.html</to>
4 </outbound-rule>

在UrlRewrite中添加该规则后,我们在页面中原本的地址是

可是在页面中显示却成了如下:

这样可以隐藏了许多开发中的技术,较为安全。

以上,就是UrlRewrite的一些常见的用法。关于UrlRewrite,网上也有人说这个会影响性能,因为在每次请求的时候都需要经过换一次过滤,但是这个还是要见仁见智,毕竟,使用URL重写,对网址还是有好处的。

UrlRewrite的帮助文档:http://pan.baidu.com/s/1c0fg0uc

时间: 2024-09-29 12:15:57

URL地址重写的相关文章

URL地址重写例子(Helicon)

# Helicon ISAPI_Rewrite configuration file# Version 3.1.0.86 #RewriteEngine on RewriteRule ^/esf/.+(/.+){4,}$ /404.aspx?$0RewriteRule ^/esf/attn_1$ /esf/qh1/ [NC,R=301]RewriteRule ^/esf/attn_1_sid_0$ /esf/qh1/ [NC,R=301]RewriteRule ^/zuf/attn_1$ /zuf

Nginx 的编译安装和URL地址重写

本文转自:http://www.178linux.com/14119#rd?sukey=ecafc0a7cc4a741b573a095a3eb78af6b4c9116b74d0bbc9844d8fc5e8b50b3fc807541ae53fd06c67ac4f4adaae6981 在此只是做个笔记给自己看的. Nginx专题: 从编译安装到URL重写 前言 环境介绍 Nginx介绍 编译安装Nginx 配置文件解释 main和event{}的配置 http{}的基本配置 配置Nginx 搭建一个

Magento 自定义URL 地址重写 分类分级显示

我们打算将URL在分类页面和产品页面分别定义为: domain.com/category/分类名.html domain.com/category/子分类名.html domain.com/goods/产品名.html 其实实现很简单,无需使用任何扩展程序.操作的前提是,你已经至少建立起一个根分类,一个子分类和一个产品. 1.登陆magento后台,在目录(Catalog)下选择URL重新管理(URL Rewrite Management): 2.在你创建了分类和产品后,应该在这里可以看见sys

Apache Nginx URL 地址 重写

URL重写这东西在工作中用了很多次了,但每次都忘记了要记得把知道的积累下来. 哎,要么认为没必要,要么就是没时间?! 一.Apache 篇 官方地址:http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_rewrite.html 1.htaccess基本语法介绍 服务器有配置文件不可能由我们来改,所以大多情况下要在网站的根目录下建一个.htaccess文件. #设置重写的根目录RewriteBase /#开启重写引擎RewriteEngine

springboot中url地址重写(urlwrite)

在日常网站访问中,会把动态地址改造成伪静态地址. 例如: 访问新闻栏目 /col/1/,这是原有地址,如果这样访问,不利于搜索引擎检索收录,同时安全性也不是很好. 改造之后: /col/1.html. 改造方法: 1.添加urlrewritefilter <dependency> <groupId>org.tuckey</groupId> <artifactId>urlrewritefilter</artifactId> <version&

求类似javaniu的url地址伪静态重写

原文:求类似javaniu的url地址伪静态重写 代码下载地址:http://www.zuidaima.com/share/1550463243504640.htm 就是将url为.jsp或者.action结尾的地址,弄成像javaniu这样.htm的,把地址隐藏起来,不知道如何做,求一个demo学习一下,自己弄了几天了,貌似没什么好的成效...看看大家有没有什么好方法呢?urlrewrite好像每个页面都要配置from to 求类似javaniu的url地址伪静态重写

UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后url

UrlRewrite: UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址,类似于Apache的mod_rewrite.将我们的动态网页地址转化为静态的地址,如html.shtml,还可以隐藏网页的真正路径, 比如:有时候需要将xxx.com/news/ type1/001.jsp 转化成显示路径为xxx.com/news_type1_001.html 有点如下: 一:提高安全性,可以有效的避免一些参数名.ID等完全暴露在用户面前,如果用户随便乱输的话,不符合

解决URL中包含“%2F”导致Apache地址重写mod_rewrite失效的问题

在使用Apache地址重写mod_rewrite期间,发现,当URL和PATH_INFO中出现%2f(/)或者%5c(\), 会被认为这是个不合法的请求, Apache将会直接返回"404 (Not Found)"错误. 也就是说,Apache在调用 mod_proxy 或 mod_rewrite 模块之前,就直接拒绝请求,给出404错误. 这样做主要是为了防止CGI的安全漏洞发生,尤其是在脚本中使用了PATH_INFO但是又没有做安全过滤操作的话,很容易被注入漏洞. 假定URL是安全

项目搭建系列之四:SpringMVC框架下使用UrlRewrite实现地址重写

简单记录一下UrlRewrite实现地址重写功能. 1.pom.xml 在pom.xml增加配置UrlRewrite jar <!-- URL Rewrite --> <dependency> <groupId>org.tuckey</groupId> <artifactId>urlrewritefilter</artifactId> <version>4.0.4</version> </dependen