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

发布于 2024-08-07 20:52:14 字数 461 浏览 6 评论 0原文

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

我该如何实现这一点?

谢谢!

Hey, I want to use .htaccess to redirect the requested page to the exact same page on a different domain, and I want it to forward all POST data while CHANGING the address bar to the new domain, like a normal redirect.

Here's my code.

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

The problem is that POST data is not sent this way. I then tried this:

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

And that works to forward POST data, however the address bar does not change to the new domain1.com

How can I accomplish this?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱*していゐ 2024-08-14 20:52:14

不幸的是,HTTP 协议不支持这一点。

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

由于浏览器是加载新URL的系统,因此浏览器必须是系统重新POST提交的数据。网络服务器无法做到这一点。不幸的是,HTTP 协议没有为 Web 服务器提供一种方法来告诉浏览器执行此重新 POSTing。

有其他方法可以实现您的目标吗?

Unfortunately, the HTTP protocol does not support this.

When executing your first example, the web server sends the requesting browser a "Location" header telling the browser to navigate to a specified URL. The browser attempts to load this new URL like an ordinary web page, including displaying the URL in the browser's address bar.

Since the browser is the system loading the new URL, the browser must be the system to re-POST the submitted data. The web server can't do it. Unfortunately, the HTTP protocol does not provide a way for the web server to tell the browser to preform this re-POSTing.

Is there an alternate way to achieve your goal?

脱离于你 2024-08-14 20:52:14

我认为这是不可能的,因为要更改浏览器中的 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>

I think that's not posible because to change URL in browser, HTTP server must return some response which will tell browser to send POST data to new URL. Which as far as I know is not posible without using javascript.
When you've specified [P] option HTTP server is acting like a proxy server, hiding real source of data from browser.
I see 2 posible solutions:

  • use GET instead of POST
  • or create some script which runs on HTTP server and make POST redirects

UPD:
You can create PHP script which will be a handler for you redirect rules. The script should create following html code:

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文