我有這樣一個規律:我可以重寫URL,添加查詢參數並保存表單數據嗎?
RewriteCond %{HTTP_HOST}:%{QUERY_STRING} ^(\w+)\.t(.*)\.(\w+)?\.sprawk\.com:(.*)$
RewriteRule ^(.*) /api/translateHtmlPublic?tl=%1&su=%2&p=$1&q=%4 [B,PT,L]
這對於GET請求的偉大工程。
但是,對於POST請求,q參數爲空(我預期),但在我的Java servlet中,HttpServletRequest.getReader()
和HttpServletRequest.getInputStream()
都不提供任何數據。
使用Firefox活頭,我看到,我送:
POST /uid/contactSend.cfm HTTP/1.1
Host: fr.t51940.local.sprawk.com
Connection: keep-alive
Referer: http://fr.t51940.local.sprawk.com/uid/contact.cfm?country=137
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 146
userName=Nic&queryCountry=Libya&queryCode=137&userEmail=n.cottrell%40idea.int&Comment=Just+testing&captcha=Quotas&Submit=--+Envoyer+Commentaire+--
我知道了一個Servlet接受它作爲一個POST
因爲doPost
方法被觸發。據我所知,Apache 2.x應該在簡單的重寫過程中自動保留POST數據,但也許添加參數會擦除內容數據?
更新:我剛剛意識到(通過傾銷所有參數)userName,queryCountry,queryCode參數通過request.getParameter(String)
方法獲得正確的值。問題是我需要能夠將原始表單參數名與我在RewriteRule中引入的名稱分開。
感謝您的詳細信息。我的備份計劃是爲我的變量引入一個長前綴,以便與現有名稱衝突的可能性非常低。我希望有一種方式告訴servlet /不/自動處理主體,並通過'getParameter'使數據可用。 –