URL Rewrite的概念

URL Rewrite即URL重写,就是把传入Web的请求重定向到其他URL的过程。URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.asp?id=123 使用UrlRewrite转换后可以显示为http://www.123.com/news/123.html。

URL Rewrite有什么用?

1,首先是满足观感的要求。
对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。形如http://www.123.com/news/index.asp?id=123的网页地址,自然是毫无美感可言,而用UrlRewrite技术,你可以轻松把它显示为 http://www.123.com/news/123.html。

2,其次可以隐藏网站所用的编程语言,还可以提高网站的可移植性。 
当网站每个页面都挂着鲜明的.asp/.aspx/.php这种开发语言的标记,别人一眼即可看出你的网站是用什么语言做的。而且在改变网站的语言的时候,你需要改动大量的链接。而且,当一个页面修改了扩展名,它的pagerank也会随之消失,从头开始。我们可以用UrlRewrite技术隐藏我们的实现细节,这样修改移植都很方便,而且完全不损失pagerank。提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多

3,最后也是最重要的作用,是有利于搜索引擎更好地抓取你网站的内容。
理论上,搜索引擎更喜欢静态页面形式的网页,搜索引擎对静态页面的评分一般要高于动态页面。所以,UrlRewrite可以让我们网站的网页更容易被搜索引擎所收录。

使用urlrewrite的步骤如下:

首页,访问其官网:http://tuckey.org/urlrewrite/,我下载的是最新的目前还处于Beta版的urlrewritefilter-3.2.0,下载后将其中的urlrewrite-3.2.0.jar扔到需使用此功能项目的lib目录中去
其次,在web.xml中加入如下配置:

[xhtml] view plain copy

  1. ​ UrlRewriteFilter
  2. ​ org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
  3. ​ (这个可以不写,是配置UrlRewriter日志的配置,级别定成WARN)
  4. ​ logLevel
  5. ​ WARN
  6. ​ UrlRewriteFilter
  7. ​ /*
  8. ​ REQUEST
  9. ​ FORWARD

过滤器的参数

  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样式的配置, 设置这些参数则其他所有的参数都会被忽略. 比如:

modRewriteConfText

RewriteRule ^/~([^/]+)/?(.*) /u/1/1/2 [R]

RewriteRule ^/([uge])/([^/]+)/ /1/$2/ [R]

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

其实,urlrewrite其实就是个过虑器,它将会过虑用户的所有请求,符合规则的便对其进行重定向,具体的配置参数的使用方法见官方文档:http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/index.html
配置好web.xml后将下载的urlrewritefilter-3.2.0中的urlrewrite.xml配置文件放在WEB-INF目录下,这样在使用urlrewritefilter时它便自动到该目录下读取相关的配置了,我配置了个简单的,代码如下:

[xhtml] view plain copy

  1. ​ /zh_CN/NewsInfo/NEWS_([0-9]+)
  2. ​ /zh_CN/NewsInfo/view.do?method=view&id=$1
  3. ​ /zh_CN/NewsInfo.do/?method=view&id=([0-9]+)$
  4. ​ /zh_CN/NewsInfo/NEWS_$1

rule结点中form的规则默认使用的是正则表达式来匹配的,当用户访问服务器时的URL会与该配置相比较,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转,具体配置可见官网文档。
outbound-rule结点是服务器解析后的页面URL对外表现的形式,配置与上面的大体相同,如我一新闻链接代码在JSP中书写的形式如下:

[xhtml] view plain copy

  1. ·

经服务器解析后,最终显示在页面中的将变成:

[xhtml] view plain copy

  1. · 新闻标题

当用户点击此链接后urlrewrite便用通过rule的配置重跳转到真正的访问地址,这样便很好的隐藏了真实地址
这其中有点是需要注意的,引用官网中的一段话:
Using the example above JSP’s with the code

经验分享:

在Java web服务器内使用url rewrite

每个网页或请求都是一个url地址,一般,这个地址可能是.do,.page,.action之类的并加上’?’号、’&’号查询串等构成的一个长长的的url。很urgly。
一般的url———————————————————-较好的url
http://www.xxx.net/user/profile.do?id=20001 ====> http://www.xxx.net/user/20001
http://www.xxx.net/forum/board.do?name=java ====> http://www.xxx.net/forum/java
http://www.xxx.net/forum/thread.do?id=29923 ====> http://www.xxx.net/thread/29923
后者明显较为直观和漂亮。
使用url rewrite可以很好的改善这个状况。网站url rewrite应用是非常广泛的,良好的url设计给用户带来的非常好的体验,同时也能吸引搜索引擎的注意。
一种rewrite称为一个规则,上面的例子就是3个规则。rewrite技术可以在代理服务器实现,或者可以在tomcat之类的java web服务器实现。 Apache HTTP Server 2.x 和 mod_proxy提供了不错的Rewrite处理方法。so如果使用apache,则直接在apache中配置Rewrite即可。但是对于没有使用代 理,或者不完全要在代理服务器配置Rewrite的web应用,通过第三方Jar包也是可以实现很perfect的rewrite技术的。这是本帖的着重 点。
这个第三方包的地址是:http://tuckey.org/urlrewrite/ (待会再去这个网站,现在先别去)
这个包使用正则表达式仿照了apache rewrite的做法。而实现原理也是很明晰的:filter,forward,redirect机制组合:
在web.xml配置一个UrlRewriteFilter,拦截所有进来的请求,对服务要求的请求进行rewrite。比如,对 http://www.xxx.net/user/([0-9]+)请求,forward到/profile.do?id=1。这就是一条规则。在这个第三方包中的规则文件urlrewrite.xml中可以这样定义:Java代码​/user/([0−9]+)/?1。这就是一条规则。在这个 第三方包中的规则文件urlrewrite.xml中可以这样定义: Java代码 ​ ^/user/([0-9]+)/?
​ /profile.do?id=1/user/([0−9]+)/?1 ^/user/([0-9]+)/?
/profile.do?id=1对我来说,一般我会配置一个通用的rule,使所有没有包含”.”的urlforward到.do的action上来(本人使用strut做系统较多)Java代码​​−这是一个通用请求urlrewrite​−将请求forwordurl加上“.do”的处理器上。​−例:​−请求http://domain/user/login将被forward到http://domain/user/login.do​−请求http://domain/user/login/将被forward到http://domain/user/login.do​−请求http://domain/user/logout/将被forward到http://domain/user/logout.do​​/([a−zA−Z]+[0−9a−zA−Z−/]∗[0−9a−zA−Z]+)/?1 对我来说,一般我会配置一个通用的rule,使所有没有包含”.”的url forward到.do的action上来(本人使用strut做系统较多) Java代码 ​ ​ - 这是一个通用请求url rewrite ​ - 将请求forword url加上“.do”的处理器上。 ​ - 例: ​ - 请求 http://{domain}/user/login 将被forward到 http://{domain}/user/login.do ​ - 请求 http://{domain}/user/login/ 将被forward到 http://{domain}/user/login.do ​ - 请求 http://{domain}/user/logout/ 将被forward到 http://{domain}/user/logout.do ​ ​ ^/([_a-zA-Z]+[_0-9a-zA-Z-/]*[_0-9a-zA-Z]+)/?
​ /$1.do

- 这是一个通用请求url rewrite
- 将请求forword url加上“.do”的处理器上。
- 例:
- 请求 http://{domain}/user/login 将被forward到 http://{domain}/user/login.do
- 请求 http://{domain}/user/login/ 将被forward到 http://{domain}/user/login.do
- 请求 http://{domain}/user/logout/ 将被forward到 http://{domain}/user/logout.do

</note>
<from>^/([_a-zA-Z]+[_0-9a-zA-Z-/]*[_0-9a-zA-Z]+)/?$</from>
<to type="forward">/$1.do</to>
</rule>

上面只是介绍个大概,并不是urlrewriter这个jar包的使用指南。如果你觉得这种rewrite做法不错的话,不如直接访问这个网站吧 [url]http://tuckey.org/urlrewrite/ [/url]
或者继续下面的getting start
getting start:
第一步:从http://tuckey.org/urlrewrite/ 上下载urlrewrite-3.0.3.jar包,放到webapp classpath下
第二步:在web.xml配置UrlRewriteFilter:
Java代码

<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>
</filter-mapping>
<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>
</filter-mapping>

第三步:在web-inf下新建urlrewrite.xml文件,简单填入以下内容:
Java代码

URL rewrite相关推荐

  1. 在ASP.NET MVC中使用IIS级别的URL Rewrite

    在ASP.NET MVC中使用IIS级别的URL Rewrite 原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的 ...

  2. 艾伟:重提URL Rewrite(3):在URL Rewrite后保持PostBack地址

    在进行了URL Rewrite之后,经常会遇到的问题就是页面中PostBack的目标地址并非客户端请求的地址,而是URL Rewrite之后的地址.以上一篇文章中的重写为例: <rewriter ...

  3. 重提URL Rewrite(3):在URL Rewrite后保持PostBack地址(转老赵blog)

    在进行了URL Rewrite之后,经常会遇到的问题就是页面中PostBack的目标地址并非客户端请求的地址,而是URL Rewrite之后的地址.以上一篇文章中的重写为例: <rewriter ...

  4. 无法显示服务器级别,URL Rewrite会导致“无法显示此页面”

    我已经在服务器级别实施了URL重写,因为我想将符合特定规则的所有HTTP和HTTPS请求重定向到我的实际站点,并且重定向只应发生如果用户正在击中我的实际站点.规则最初工作正常.但是,在我的实际站点上反 ...

  5. Windows10中的IIS10安装php manager和IIS URL Rewrite 2.0组件的方法

    Windows10中自带的Server:Microsoft-IIS/10.0,然后这个10却让原本支持组件无法安装了,php manager组件安装时提示"必须安装IIS7以上才可以安装&q ...

  6. Win10中的IIS10安装php manager和IIS URL Rewrite

    首先是php manager php manager的最新下载地址是:http://phpmanager.codeplex.com/releases/view/69115 打开regedit,找到: ...

  7. Atitit.实现反向代理(1)----url rewrite 配置and内容改写 and -绝对路径链接改写 java php...

    Atitit.实现反向代理(1)----url rewrite  配置and内容改写 and -绝对路径链接改写 java php 1. 代理的实现:::普通代理and反向代理?? 1 2. url  ...

  8. magento url rewrite规则

    magento运行需要php开启php_curl.dll模块.url rewrite规则对应表:Code Call Valuebase Mage::getBaseDir()Mage::getBaseD ...

  9. 使用URL Rewrite实现网站伪静态

    下载urlwrite包 将urlrewrite-***.jar复制到web应用lib文件夹下 web.xml中配置URL Rewrite: 例: <filter> <filter-n ...

  10. url rewrite 实现url地址的伪静态化

    (1) 在Java web服务器内使用url rewrite(实现url地址的伪静态化) 每个网页或请求都是一个url地址,一般,这个地址可能是.do,.page,.action之类的并加上'?'号. ...

最新文章

  1. C# DataGridView控件用法
  2. 逻辑运算符和||与(和|)的区别
  3. 第2章 数字之魅——求二进制中1的个数
  4. 维纳滤波原理(Wiener Filter)
  5. 一个使用 asyncio 协程的网络爬虫(一)
  6. csrf攻击原理与解决方法_信息安全之CSRF攻击
  7. LSGO软件技术团队2015~2016学年第十周(1102~1108)总结
  8. django http404 详解
  9. php语句结束标记,PHP结束标记“?”
  10. 由两个问题引发的对GaussDB(DWS)负载均衡的思考
  11. The essentiality for Close-Out The Project
  12. opencv读取视频,读取摄像头
  13. 职位搜索引擎职友集开放招聘信息协议
  14. win10装win7进入不了bios的解决方法
  15. Creo Illustrate动画制作视频教程
  16. vue rsa加密 php解密,Vue项目中的RSA加解密
  17. 本科,硕士们进了BAT拿高工资,为什么博士却要挤破头低薪进985高校?
  18. 十九 Redis AOF持久化
  19. 简述CISC、RISC、RISC-V、MIPS
  20. 软件工程学习笔记(三)软件需求工程

热门文章

  1. 谷歌浏览器书签丢失,恢复工具
  2. MapGuide Viewer
  3. 转载 DOS/BAT批处理if exist else 语句的几种用法
  4. Maven 菜鸟教程 4 常用dos命令
  5. flash动画转html5 效果,一键把SWF转HTML5 canvas动画的工具-Fanvas
  6. 如何修复win7蓝牙服务器,快速解决win7系统蓝牙驱动的修复方法
  7. win7 64bit部署SharePoint Server2010
  8. windows server 2000系统安装
  9. 无法启动计算机上的服务msdtc,MSDTC服务无法启动,导致网站打不开
  10. 电脑鼠标单击变成了双击如何恢复