我有这样的规则:
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 Live 标头,我看到我正在发送:
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 中介绍的名称分开。