.htaccess在更改地址栏时重定向到外部站点并转发POST数据?

时间:2009-10-13 21:07:16

标签: .htaccess post redirect external forward

嘿,我想使用.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

我该如何做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:1)

不幸的是,HTTP协议不支持此功能。

执行第一个示例时,Web服务器向请求浏览器发送“位置”标题,告知浏览器导航到指定的URL。浏览器尝试像普通网页一样加载这个新URL,包括在浏览器的地址栏中显示URL。

由于浏览器是系统加载新URL,因此浏览器必须是系统才能重新提交提交的数据。 Web服务器无法执行此操作。不幸的是,HTTP协议没有为Web服务器提供一种方法来告诉浏览器预先形成这种重新发布的方式。

是否有其他方法可以实现目标?

答案 1 :(得分:0)

我认为这是不可能的,因为要在浏览器中更改URL,HTTP服务器必须返回一些响应,这将告诉浏览器将POST数据发送到新URL。据我所知,如果不使用javascript就不可行。 当您指定[P]选项时,HTTP服务器就像代理服务器一样,从浏览器隐藏真正的数据源。 我看到了两个可行的解决方案:

  • 使用GET而不是POST
  • 或创建一些在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>