5

工作我使用有其規則之一,如下所示tuckey URLRewrite過濾器:URLRewrite過濾器無法與多形式

<rule> 
    <name> Proxy URL with jession ID's </name> 
    <note> 

    </note> 
    <condition type="parameter" name="ParamName">[\p{ASCII}]+</condition> 
    <from>^/([^?]*)\.htm(.*)$</from> 
    <to type="proxy">%{request-url};jsessionid=%{parameter:ParamName}$2</to> 
</rule> 

的問題,只要我添加enctype="multipart/form-data"到我的形式(使用POST方法BTW)出現。該過濾器無法重寫網址。

任何想法如何解決這個問題?

+0

你得到了什麼樣的錯誤? – Kraylog

+0

與正則表達式不匹配,重寫規則不起作用 –

+0

您的問題是您無法通過POST檢索輸入字段值? – kamaci

回答

1

如果您可以更改應用程序的源代碼,您可以修改它,以便您可以使用「參數」方法提取JSESSIONID。默認情況下(至少在Tomcat上),JSESSIONID不會在表單文章中傳遞,但你可以修改表單來包含它。例如,一個JSP頁面可能是這樣的:

<form action="index.jsp" method="post"> 
    <input type="hidden" name="JSESSIONID" value="${pageContext.session.id}"/> 
    <input type="submit"/> 
</form> 

或者你可以嘗試使用不同的條件從會話cookie獲取JSESSIONID。我還沒有試過以下,但想象類似的東西可能會爲你工作:

<rule> 
    <name>Proxy URL with jsession ID's</name> 
    <note></note> 
    <condition type="cookie" name="JSESSIONID"/> 
    <from>^/([^?]*)\.htm(.*)$</from> 
    <to type="proxy">%{request-url};jsessionid=%{cookie:JSESSIONID}$2</to> 
</rule> 

有,你可能會使用其他條件來檢查會話ID是否有效(請求會話Id-有效) ,源自cookie(請求會話ID,來自cookie)或源自發布操作的URL(requested-session-id-from-url)。

我不知道你正在使用的UrlRewriteFilter的版本,但如果你看看「永久重定向包含JSESSIONID傳入的URL。」例如在下面的網址,你會看到JSESSIONID並不像其他參數POST/GET參數。

http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/guide.html

我可以強烈建議使用Firefox/Firebug的一起,以便您可以被傳遞正是一個主意,檢查你的POST請求和頭。 (我敢肯定還有其他類似的工具可以做到這一點,Fiddler 2等)。