【问题标题】:.htaccess Redirect to External Site and Forward POST data while Changing address bar?.htaccess 在更改地址栏时重定向到外部站点并转发 POST 数据?
【发布时间】:2010-12-06 11:32:52
【问题描述】:

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

我怎样才能做到这一点?

谢谢!

【问题讨论】:

    标签: .htaccess post redirect external forward


    【解决方案1】:

    很遗憾,HTTP 协议不支持这一点。

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

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

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

    【讨论】:

      【解决方案2】:

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

      • 使用 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>
      

      【讨论】:

      猜你喜欢
      • 2013-09-09
      • 2010-11-21
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 2012-04-25
      • 2012-01-27
      相关资源
      最近更新 更多