1

次のようなルールがあります。

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 サーブレット内では と の両方で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+--

メソッドがトリガーされるPOSTため、サーブレットがそれを として受け取っていることがわかります。doPostApache 2.x が単純な書き換え中に POST データを自動的に保存する必要があることは理解していますが、パラメーターの追加によってコンテンツ データが消去されているのではないでしょうか?

更新: userName、queryCountry、queryCode パラメーターがrequest.getParameter(String)メソッドを介して正しい値を取得していることに気付きました (すべてのパラメーターをダンプすることにより)。問題は、元のフォーム パラメータ名を、RewriteRule で紹介したものから分離できるようにする必要があることです。

4

1 に答える 1

1
  1. POSTのパラメーターは、ヘッダーではなく本文にあります。URLに影響を与えることなく、URLを好きなだけ書き換えることができます。

  2. コンテンツタイプがであるPOSTリクエストの本文は、本文の読み取りを介して取得され、何も配信しないapplication/x-www-form-urlencodedパラメータのみで構成されます。(サーブレット仕様3、#3.1.1)request.getParameter().request.getInputStream()request.getReader()

  3. サーブレット仕様#3によると、URLに追加するパラメータは、を介して取得できる必要がありますgetParameter()

  4. 本文のPOSTパラメータとヘッダーのURLパラメータを区別する方法はありません。したがって、おそらくあなたの解決策、またはあなたの問題に何か問題があります。

于 2012-12-06T23:28:08.030 に答える