1

.htaccess を使用して、要求されたページを別のドメインのまったく同じページにリダイレクトし、通常のリダイレクトのように、アドレス バーを新しいドメインに変更しながら、すべての POST データを転送したいと考えています。

これが私のコードです。

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.domain1.com/$1 [R=301,L] 

問題は、POST データがこの方法で送信されないことです。次に、これを試しました:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.domain1.com/$1 [R=301,P]

これは POST データを転送するために機能しますが、アドレス バーは新しい domain1.com に変わりません。

どうすればこれを達成できますか?

ありがとう!

4

2 に答える 2

1

残念ながら、HTTP プロトコルはこれをサポートしていません。

最初の例を実行すると、Web サーバーは要求元のブラウザーに "Location" ヘッダーを送信し、ブラウザーに指定された URL に移動するように指示します。ブラウザーは、ブラウザーのアドレス バーに URL を表示するなど、通常の Web ページのようにこの新しい URL を読み込もうとします。

ブラウザは新しい URL をロードするシステムであるため、ブラウザは送信されたデータを再 POST するシステムである必要があります。ウェブサーバーはそれを行うことができません。残念ながら、HTTP プロトコルには、Web サーバーがブラウザにこの再 POST を実行するように指示する方法がありません。

目標を達成する別の方法はありますか?

于 2009-10-13T21:25:13.313 に答える
0

ブラウザーで URL を変更するには、HTTP サーバーがブラウザーに POST データを新しい URL に送信するように指示する何らかの応答を返す必要があるため、それは不可能だと思います。私が知る限り、JavaScriptを使用しないと不可能です。[P] オプションを指定すると、HTTP サーバーはプロキシ サーバーのように動作し、実際のデータ ソースをブラウザーから隠します。考えられる解決策は 2 つあります。

  • POST の代わりに GET を使用する
  • または、HTTP サーバーで実行され、POST リダイレクトを行うスクリプトを作成します。

UPD: リダイレクト ルールのハンドラーとなる PHP スクリプトを作成できます。スクリプトは、次の html コードを作成する必要があります。

<body onload="document.forms[0].submit()">
<form action="post" action="<?=$your_new_url_here>">
<?php
    foreach ($_POST as $param => $value):
?>
<input type="hidden" 
    name="<?=htmlspecialchars($param)?>" 
    value="<?=htmlspecialchars($value)?>" />
<?php
    endforeach;
?>
</form>
</body>
于 2009-10-13T21:20:10.257 に答える