我有一个实时网站,我想将一个页面重定向到我正在开发的当前机器上。我尝试了以下
header('HTTP/1.1 307 Temporary Redirect');
header('Location: http://localhost/dev/test.php');
不应该对实时服务器的localhost进行重定向,而应该对我目前用于开发的本地机器进行重定向。这只是测试我添加到我的网站的支付网关(支付网关需要一个有效的URL重定向到,因此我不能使用localhost)。
付款网关将重定向到
http://www.example.com/test.php
然后应将其重定向到我当前的机器:
http://localhost/dev/test.php
如果php无法管理此问题,我可以使用apache重定向执行此操作吗? 我还想将在实时服务器上收到的所有GET和POST参数发送到我的本地页面。
答案 0 :(得分:1)
您不需要发送HTTP 1.1标头,这可能是阻止重定向工作的原因。您的Web服务器将自动添加此服务器,因为它需要发送状态代码。而是将307状态作为header()的第三个参数传递:
header('location: http://localhost/some/url', true, 307);
重定向标题由您的浏览器解析,因此“localhost”将与您的浏览器运行的机器相同。
要传递所有GET参数,您可以将$_SERVER['QUERY_STRING']
附加到网址:
header('location: http://localhost/some/url?' . $_SERVER['QUERY_STRING'], true, 307);
POST参数更复杂。您需要通过连接$ _POST数组中的所有内容来构建自己的URL。一定要urlencode()值。
$redirect_url = 'http://localhost/some/url?';
foreach($_POST as $key => $value){
$redirect_url .= $key . '=' . urlencode($value) . '&';
}
header('location: ' . $redirect_url, true, 307);
请记住,您只能将POST请求重定向为GET。但是,如果您只是构建一个用于测试网关集成的模拟器,那应该没问题。
答案 1 :(得分:0)
您不应使用 localhost ,因为它始终由客户端计算机解析。
header('Location: http://localhost/dev/test.php');
将localhost替换为您的服务器域名,如下所示:
header('Location: http://yourliveserver.com/dev/test.php');