简单的php元重定向脚本无法正常工作

时间:2010-08-22 19:07:04

标签: php

我有http://mysite.com/go.php?site=http://somesite.com/main/?s=12&action=load

<?php
$url = $_GET['site'];

echo "<meta http-equiv=\"refresh\" content=\"0;url=" . $url . "\">";

然而,我http://somesite.com/main/?s=12无法加载。

如何转到http://somesite.com/main/?s=12&action=load

3 个答案:

答案 0 :(得分:4)

您需要先urlencode()作为site变量传递的网址(即创建go.php链接时)。

作为旁注,如果这是您的页面输出的唯一内容,为什么不使用

header("Location: ".$url); 

它会向浏览器发出302 Found标题,告诉它跟随新位置,而不是输出HTML(如果输出没有正确的页面结构,则无论如何都会被破坏)。

答案 1 :(得分:0)

[编辑]:新解决方案

这就像一个魅力。我在我的机器上测试过。

$url = urldecode(substr(http_build_query($_GET),5));
echo "<meta http-equiv=\"refresh\" content=\"0;url=" . $url . "\">";

旧解决方案(不工作)
将您的代码更改为:

$url = $_GET['site'];
echo "<meta http-equiv=\"refresh\" content=\"0;url=" . urlencode($url) . "\">";

答案 2 :(得分:0)

您需要将要传递的参数编码为site参数。您可以在PHP中使用urlencode()或在javascript中使用encodeURI()

所以这就像是:

http://mysite.com/go.php?site=http%3a%2f%2fsomesite.com%2fmain%2f%3fs%3d12%26action%3dload

现在在PHP中,你可以这样做:

<?php
header("Location: ".$_GET['site']);
?>