繁体   English   中英

我可以重写URL,添加查询参数并保留表单数据吗?

[英]Can I rewrite a URL, adding query params and preserve the form data?

我有一条规则:

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参数为null(这是我期望的),但是在我的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+--

我知道,由于doPost方法被触发,因此servlet正在以POST形式接收它。 我知道Apache 2.x应该在简单的重写过程中自动保留POST数据,但是也许添加参数会抹掉内容数据吗?

更新:我刚刚意识到(通过转储所有参数),userName,queryCountry,queryCode参数正在通过request.getParameter(String)方法获取正确的值。 问题是我需要能够将原始表单参数名称与我在RewriteRule中引入的名称分开。

  1. POST的参数在正文中,而不在标头中。 您可以随意重写URL,而不会影响它们。

  2. 内容类型为application/x-www-form-urlencoded的POST请求的正文仅包含通过request.getParameter().检索的参数request.getParameter(). 通过request.getInputStream()request.getReader()读取正文不会传递任何内容。 (Servlet规范3,#3.1.1)

  3. 根据Servlet规范#3,应通过getParameter()检索添加到URL的参数。

  4. 无法将正文中的POST参数与标头中的URL参数区分开。 因此,您的解决方案或问题可能有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM