网站的URL重写
2015-09-11 09:53
483 查看
现在大部分的网站和商城都会使用到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
?
声明完filter后,需要在WEB-INF目录下新建一个urlrewrite.xml文件
?
该文件是UrlRewrite的规则制定文件,后续主要通过配置它来进行URL的重写。
至此,UrlRewrite的导入就完成了
UrlRewrite 导入成功后,接下来主要通过在urlrewrite.xml添加规则,就能实现URL的重写了。在此列举一些常用的规则。
?
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
上。当网址规则中有多个正则的时候,匹配的参数也会随之增加。如:
?
rule 的默认匹配方式是正则表达式,但是,有时候也可以以通配符的形式进行匹配。在编写规则的时候,只需要在rule添加一个match-type="wildcard" 的属性即可。
?
关于to节点,UrlRewrite提供了多种网址跳转方式,如forward和redirect,这两种方式,和大部分MVC框架提供的功能一样,在此不再赘述。
除了支持指定规则的跳转外,UrlRewrite还支持当匹配规则的时候执行某个对象的某个函数
?
如上述设置,要实现匹配规则是执行某个函数,需要添加多一个run节点,在节点上面添加对应的类属性和方法属性。同时,对应的类必须继承RewriteRule类,执行的方法必须传入两个参数,分别是HttpServletRequest 和HttpServletResponse
?
这样,当客户端输入的网址第一次匹配到指定规则的时候,UrlRewrite就会执行对应的函数,该函数只在第一次匹配成功的时候执行。
如果想要每次匹配规则都执行某函数,可以在urlrewrite添加class-rule子节点,该节点设置后,每次匹配规则后,指定的函数都会执行一次。
?
除了对请求的URL进行处理外,UrlRewrite还提供了对返回页面中的地址进行重写的功能。使用rule是对用户输入的url进行处理,但是开发过程中,经常需要在页面中也添加一些网址请求,UrlRewrite可以通过规则,对页面中的网址也进行重写。如:
?
在UrlRewrite中添加该规则后,我们在页面中原本的地址是
![](https://jf-bucket-public.oss-cn-qingdao.aliyuncs.com/jfperiodical/attached/image/20150707/2086538097.png)
可是在页面中显示却成了如下:
![](https://jf-bucket-public.oss-cn-qingdao.aliyuncs.com/jfperiodical/attached/image/20150707/399621412.png)
这样可以隐藏了许多开发中的技术,较为安全。
以上,就是UrlRewrite的一些常见的用法。关于UrlRewrite,网上也有人说这个会影响性能,因为在每次请求的时候都需要经过换一次过滤,但是这个还是要见仁见智,毕竟,使用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
?
?
至此,UrlRewrite的导入就完成了
UrlRewrite 导入成功后,接下来主要通过在urlrewrite.xml添加规则,就能实现URL的重写了。在此列举一些常用的规则。
?
如上规则设置,当客户端访问的网址是http://127.0.0.1:8080/Struts/demo/hello.html 的时候,因为匹配部分是hello,所以它跳转到的是http://127.0.0.1:8080/Struts/hello
上。当网址规则中有多个正则的时候,匹配的参数也会随之增加。如:
?
?
除了支持指定规则的跳转外,UrlRewrite还支持当匹配规则的时候执行某个对象的某个函数
?
?
如果想要每次匹配规则都执行某函数,可以在urlrewrite添加class-rule子节点,该节点设置后,每次匹配规则后,指定的函数都会执行一次。
?
?
![](https://jf-bucket-public.oss-cn-qingdao.aliyuncs.com/jfperiodical/attached/image/20150707/2086538097.png)
可是在页面中显示却成了如下:
![](https://jf-bucket-public.oss-cn-qingdao.aliyuncs.com/jfperiodical/attached/image/20150707/399621412.png)
这样可以隐藏了许多开发中的技术,较为安全。
以上,就是UrlRewrite的一些常见的用法。关于UrlRewrite,网上也有人说这个会影响性能,因为在每次请求的时候都需要经过换一次过滤,但是这个还是要见仁见智,毕竟,使用URL重写,对网址还是有好处的。
原文点此查看
相关文章推荐
- 12个免费学习编程的网站
- Exchange 2016新架构体系
- Exchange 2016新架构体系
- 12个免费学习编程的网站
- SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法
- Android架构设计和软硬整合完整训练
- Android架构设计和软硬整合完整训练
- 修改Magento只允许登陆用户访问网站
- Flume学习1_Flume NG架构设计要点及配置实践
- C/S架构和B/S架构的概念和区别
- 网站代码优化--几种最常6用的标签作用
- 天下数据分析浏览器兼容对网站的意义
- NTP服务架构和使用
- WEB前端常用网站收集
- 软件架构设计---基于鲁棒图进行设计
- C#模拟百度登录并到指定网站评论回帖(一)
- 自动备份网站
- 十大相似图片搜索网站(以图搜图)
- 数据可视化参考文献/网站/书籍
- 配置子目录Web.config使其消除继承,用虚拟目录创建多个网站的方法