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: 參考資料

 

能夠網上搜下關於 靜態,站點優化,搜索引擎優化的相關知識就明白了。

相關文章
相關標籤/搜索