本文來自:http://springkingster.javaeye.com/blog/175114
urlrewritefilter 下載: http://tuckey.org/urlrewrite/#download
所用基于動態(tài)的url http://www.nihaoblog.com/content.jsp?id=1&contentid=404按照各大搜索引擎的喜好,應該美化成http://www.nihaoblog.com/content/1_404.html靜
態(tài)網(wǎng)頁的方式,盡管目前的google及幾大搜索引擎宣稱支持動態(tài)頁網(wǎng)的抓取,但與傳統(tǒng)的html文件相比較抓取率仍不在一個數(shù)量級。Apche的
mod_rewrite模塊具有此功能,但是對于租用虛擬主機的用戶來說就比較麻煩不太可能對所有運營商有更多的要求,需要條件依賴就不具通用性。
目前有一個解決方法,通過
UrlRewriteFilter可以完全實現(xiàn)動態(tài)URL表態(tài)化,你可以將它直接應用到你的web應用中,不管你用的是jsp+javabean還是struts.
下面是使用方法:
xml 代碼
- <filter>
- <filter-name>UrlRewriteFilter</filter-name>
- <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>UrlRewriteFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
根據(jù)自己的需要,將相應目錄下的url轉(zhuǎn)給UrlRewriteFilter來處理。
3、配置urlwrite規(guī)則文件WEB-INF/urlrewrite.xml
配置如下:
- <rule>
- <from>/content/([0-9]+)_([0-9]+).html</from>
- <to>/content.jsp?id=$1&contentid=$2</to>
- </rule>
xml 代碼
注意:有多個參數(shù)時,中的連接符號&應該是&
每個網(wǎng)頁或請求都是一個url地址,一般,這個地址可能是.do,.page,.action之類的并加上'?'號、'&'號查詢串等構(gòu)成的一個長長的的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可以很好的改善這個狀況。網(wǎng)站url rewrite應用是非常廣泛的,良好的url設計給用戶帶來的非常好的體驗,同時也能吸引搜索引擎的注意。
一
種rewrite稱為一個規(guī)則,上面的例子就是3個規(guī)則。rewrite技術(shù)可以在代理服務器實現(xiàn),或者可以在tomcat之類的java
web服務器實現(xiàn)。 Apache HTTP Server 2.x 和
mod_proxy提供了不錯的Rewrite處理方法。so如果使用apache,則直接在apache中配置Rewrite即可。但是對于沒有使用代
理,或者不完全要在代理服務器配置Rewrite的web應用,通過第三方Jar包也是可以實現(xiàn)很perfect的rewrite技術(shù)的。這是本帖的著重
點。
這個第三方包的地址是:http://tuckey.org/urlrewrite/ (待會再去這個網(wǎng)站,現(xiàn)在先別去)
這個包使用正則表達式仿照了apache rewrite的做法。而實現(xiàn)原理也是很明晰的:filter,forward,redirect機制組合:
在
web.xml配置一個UrlRewriteFilter,攔截所有進來的請求,對服務要求的請求進行rewrite。比如,對
http://www.xxx.net/user/([0-9]+)請求,forward到/profile.do?id=$1。這就是一條規(guī)則。在這個
第三方包中的規(guī)則文件urlrewrite.xml中可以這樣定義:
代碼
- <rule>
- <from>^/user/([0-9]+)/?$from>
- <totype="forward">/profile.do?id=$1to>
- <rule>
<script>render_code();</script>
對我來說,一般我會配置一個通用的rule,使所有沒有包含"."的url forward到.do的action上來(本人使用strut做系統(tǒng)較多)
代碼
- <rule>
- <note>
- - 這是一個通用請求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>
- <totype="forward">/$1.doto>
- <rule>
<script>render_code();</script>
上面只是介紹個大概,并不是urlrewriter這個jar包的使用指南。如果你覺得這種rewrite做法不錯的話,不如直接訪問這個網(wǎng)站吧 http://tuckey.org/urlrewrite/
第一步:從http://tuckey.org/urlrewrite/ 上下載urlrewrite-3.0.3.jar包,放到webapp classpath下
第二步:在web.xml配置UrlRewriteFilter:
代碼
- <filter>
- <filter-name>UrlRewriteFilterfilter-name>
- <filter-class>
- org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
- filter-class>
- <init-param>
- <param-name>logLevelparam-name>
- <param-value>WARNparam-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>UrlRewriteFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
<script>render_code();</script>
第三步:在web-inf下新建urlrewrite.xml文件,簡單填入以下內(nèi)容:
代碼
- <!--sp-->xmlversion="1.0"encoding="utf-8"?>
- "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
-
- <urlrewrite>
- <rule>
- <note>
- - 這是一個通用請求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>
- <totype="forward">/$1.doto>
- rule>
-
- urlrewrite>
<script>render_code();</script>
第四步:啟動web應用,將原來需要.do的請求改為去掉.do后請求,看看結(jié)果。
第五步:更詳細的規(guī)則定義,請看http://tuckey.org/urlrewrite/manual/3.0/