web-dev-qa-db-ja.com

Apacheのリダイレクト(POST params)を維持)

サーバーにApacheがインストールされていて、httpからhttpsにリダイレクトする必要があります。これは、ロードバランサーソリューションがhttpsを処理できないため、リクエストがhttpで受信され、httpd.confファイルの以下の行を使用してそれらをhttpsに転送するためです。

<VirtualHost 10.1.2.91:80>
     Redirect 302 /GladQE/link https://glad-test.com/GladQE/link.do
</VirtualHost>

これはGETリクエストでは問題なく機能しますが、POSTリクエストはURLで渡されたパラメーターを失います。このリダイレクトを実行し、POST paramsを維持する最も簡単な方法は何でしょうか。 ?

http://glad-test.com/GladQE/link.do からここまで取得する必要があります https://glad-test.com/GladQE/link.do =維持POST params

ありがとう

トム

16
shawsy

標準のApacheリダイレクトは、URLレベルで機能するため、POSTデータを処理できません。POSTデータは、要求の本文で渡されます。標準のリダイレクトを行うと削除されます。

PHPスクリプトを使用してPOSTリクエストを透過的に転送するか、またはRewrite(mod_rewrite)とProxy(mod_proxy)モジュールの組み合わせを使用するかのいずれかを選択できます。次のようなApacheの場合:

RewriteEngine On
RewriteRule /proxy/(.*)$ http://www.example.com/$1 [P,L]

PフラグはリクエストをProxyモジュールに渡すため、/proxy/で始まるURLパスを使用して(GETまたはPOSTは関係ありません))サイトに来るものはすべてhttp://www.example.com/へのプロキシリダイレクトとして透過的に処理されます。

参考までに:

18
dezlov

HTTPステータスコード307で試すことができます。RFC準拠のブラウザは、postリクエストを繰り返す必要があります。リファレンス: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

302が歴史的に実装された方法とは対照的に、元の要求を再発行するときに要求メソッドを変更することはできません。たとえば、POSTリクエストは、別のPOSTリクエストを使用して繰り返す必要があります。

302から307に変更するには、次のようにします。

<VirtualHost 10.1.2.91:80>
     Redirect 307 /GladQE/link https://glad-test.com/GladQE/link.do
</VirtualHost>
28
Lorenz

公開されているWebサイトはSSLを使用して機密性を保護する必要があるか、機密データが通過することがなく、サイトがsllstrippingの開始ボードに使用される可能性はありません(Googleが検索結果を提供するのには非常に正当な理由があります) HTTPS)。

ブラウザーとサイト間のトラフィックを暗号化しない場合、なぜロードバランサーとWebサーバー間のトラフィックを暗号化しようとしているのですか?ロードバランサーの外側にSSLターミネーションがある場合(非常にばかげたアプローチ)、ロードバランサーとWebサーバー間でHTTPSを使用するのは効率的ではありません。この質問は、セッションの固定/盗聴やSSLStrippingの脆弱性など、他の多くのセキュリティ問題も示唆しています。

0
symcbean