URLRewrite知识

 Part 1: 用途(我本身总结下,起码有如下这2个用途)php

 

用途1: 隐藏你的具体技术实现html

好比你发布站点时候,若是写的 http://host.com/page1.jsp?a=3&b=8 ,别人一看就知道你用的jsp实现,或者你用的 http://host2.com/page2.php,人家一看就知道你用的php的实现,可是若是你用URL重写让对外暴露的url http://host.com/page1_3_8.html ,那么谁能知道你内部用什么技术语言实现的呢?web

用途2:站点优化,尤为搜索引擎优化,不带参数的地址更容易被网络爬虫搜索到。正则表达式

好比 http://host.com/page1_3_8.html 就比 http://host.com/page1.jsp?a=3&b=8  更容易被网络爬虫搜索到,也容易被百度,google, bing 搜到服务器

 

 

Part2 咱们如何让这个目的变成现实呢? 网络

方法是,在web.xml中定义一个过滤器,而后过滤器里面会加载WEB-INF/urlrewrite.xml ,而后再urlrewrite.xml里面定义映射规则。(外网访问地址->内部地址)jsp

你们都知道,当服务器解析web.xml时,会按照如下顺序:context-param -> listener -> filter -> servlet ,因此过滤器是在servlet以前解析出的,也就是在全部页面以及充当控制器的servlet实例化以前就有了。 ide

 

而后咱们解读UrlRewriteFilter类(由于Filter用于拦截请求,因此在请求发送到具体页面以前已经被过滤了,也就是被这些映射规则所适用过了)优化

 

能够看出,在载入UrlRewriter时候,会去读confPath所表明的重写映射文件,而这个重写映射文件confPath定义为搜索引擎

 

也就是要么指定一个,不然就是取拿DEFAULT_MOD_REWRITE_STYLE_CONF_PATH,若是拿不到就拿DEFAULT_WEB_CONF_PATH

 

  
  
  
  
  1. public static final String DEFAULT_MOD_REWRITE_STYLE_CONF_PATH = "/WEB-INF/.htaccess"
  2.  
  3. public static final String DEFAULT_WEB_CONF_PATH = "/WEB-INF/urlrewrite.xml"
  4.  
  5.   

因此,咱们Canton例子中,最终就会读/WEB-INF/urlrewrite.xml里面定义的各类重写映射规则。

 

 

Part 3:深刻解读映射文件 urlrewrite.xml

 

全部的重写规则都定义在urlrewrite.xml,并且每一个规则都对应 一个rule 元素,每一个rule元素应该有这样的结构

 

<rule>
<from>  用正则表达式写出的外网访问地址,通常用html后缀来屏蔽具体技术实现细节</from>
<to>用位置参数给出的内网页面url,能够变为你的内部实现,好比jsp页面就用.jsp扩展名</to>
</rule>

 

例如

 

  
  
  
  
  1. <rule> 
  2. <from>^/(\d+)/(\d+)/page_(\d+)\.html$</from> 
  3. <to>/$1.jsp?category=$2&amp;page=$3</to> 
  4. </rule> 
  5.  
  6.   

这个例子中,咱们能够看到,from ^/(\w+)/(\w+)/page_(\d+)\.html$ ,这是一个正则表达式,^,$是首尾界定符,因此它表示,访问一个

/一个或多个数字(位置1/一个或多个数字(位置2/page_一个或多个数字(位置3.html 的请求,把他映射到什么内部请求呢?

第一个位置的数字放$1,第二个数字的位置放$2,第三个数字的位置放$3   &amp; &的转义字符】

 

因此,加入某个请求是  http://host.com/22/33/page_444.html  ,则不难发现,第一个位置参数值为22,第二个位置参数值为33,第三个位置参数值为444

因此,系统将其转为内部的 http://host.com/22.jsp?category=33&page=444

 

 

Part 4: 参考资料

 

能够网上搜下关于 静态,站点优化,搜索引擎优化的相关知识就明白了。

相关文章
相关标签/搜索