2011-07-26 33 views
3

由於某種原因,我需要使用UrlRewriteFilter從Spring中MVC項目中的查詢字符串從Url中刪除「.jsp」。如何使用UrlRewriteFilter從帶查詢字符串的url中刪除「.jsp」

例如,我想改變

http://localhost:8080/admin/project.jsp?m_product=GA&m_code1=QULQ2U 

http://localhost:8080/admin/project?m_product=GA&m_code1=QULQ2U 

我嘗試了各種規則,但沒有成功。

例如,當我設置的規則爲

<rule> 
    <from>/admin/project.jsp?(.+)</from> 
    <to type="redirect">/admin/project?$1</to> 
</rule> 

UrlRewriteFilter將改變

admin/project.jsp?m_product=GA&m_code1=QULQ2U 

admin/project?p 

當我使用下面的規則之前轉義問號查詢字符串

<rule> 
    <from>/admin/project.jsp\?(.+)</from> 
    <to type="redirect">/admin/project?$1</to> 
</rule> 

UrlRewriteFilter不會重寫URL。

您的幫助表示讚賞。

+0

正如我在默認情況下'明白'僅使用URL路徑(不包括查詢字符串 - 您需要使用''或使用''來處理查詢字符串)。因此,第一條規則將以任何方式工作,因爲'?'使先前的字母'p'(在'jsp'中)成爲可選項。在第二個規則中,你使'?'爲必需的字符 - 它必須始終存在。試用'(\?(。+))?'而不是'\?(。+)'並用'$ 2'代替'$ 1'。 (** P.S **這些只是一般的想法,我不太熟悉UrlRewriteFilter) – LazyOne

回答

2

感謝您的幫助。

問題已解決!

爲了實現這一目標,我改變了規則

<rule> 
    <from>/admin/project.jsp(.*)</from> 
    <to type="forward">/project</to> 
</rule> 

關鍵是要替換重定向轉發。

0

嘗試

<rule> 
    <from>/admin/project\.jsp\?(.+)</from> 
    <to type="redirect">/admin/project?$1</to> 
</rule> 

作爲一般規則,你應該寧願使用一個控制器,這樣的任務,讓蹩腳的JSP做什麼是應該做的事:VIEW

2

隨着OCPsoft Rewrite | URLRewriteFilter,這將是爲指定一個規則非常簡單:

.addRule(Join.path("/admin/project") 
      .to("/admin/project.jsp") 
      .withInboundCorrection()); 

這同時處理入站進,出站HTML更換,並且還從舊的.jsp URL重定向到新的/管理員/項目URL,如果有人要求輸入舊網址或有舊書籤。

查詢字符串會自動爲您處理,因此無需擔心正則表達式。

3

如果您想使用Tuckey url重寫過濾器從項目中移除擴展名(.jsp),那麼它可能對您有所幫助。

From 
    http://locatohost:8080/urlrewrite/feedback.jsp 
To 
    http://locatohost:8080/urlrewrite/feedback 
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" 
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd"> 
<urlrewrite> 
    <rule> 
    <from>^/?([a-z]+)$</from> 
    <to>/$1.jsp</to> 
    </rule> 
</urlrewrite> 

如果你想反之亦然(意味着你要刪除。JSP從頁面的超鏈接),然後使用下述規則

<outbound-rule> 
    <from>^/?([a-z]+)(.(jsp|jspx))$</from> 
    <to>$1</to> 
    </outbound-rule> 

,這樣當你使用

<LI><A href="complaints.htm">Complaints</A></LI> 

那麼它將在頁面寫成

<LI><A href="complaints">Complaints</A></LI> 
相關問題