windws.location重定向到URLencoded链接

时间:2015-11-11 20:53:35

标签: php redirect

我正在尝试重定向到另一个页面作为参数传递的网址。

<?PHP $location   = urlencode($_GET['url']); ?>

    <script>
    window.location = ("<?PHP echo $location; ?>");
    </script

问题不是重定向到外部站点,而是认为编码的URL字符串是相对于当前目录的文件名。

如何让它重定向到正确的位置?

4 个答案:

答案 0 :(得分:1)

您应该在网址

之前添加http://

修改

我注意到你提到你得到这样的字符串:http%3A%2F%2Fexample.com%3Faaa%3Dbbb

所以你可以解码那个字符串:

$location   = urldecode($_GET['url']); ?>

答案 1 :(得分:0)

我建议使用php标头方向方法:

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

请参阅:http://php.net/manual/en/function.header.php ...了解更多细节。

答案 2 :(得分:0)

删除urlencode()并确保网址以http://

开头
<?PHP $location = $_GET['url']; ?>
    <script>
    window.location = ("<?PHP echo $location; ?>");
    </script>

或者:

<?php 
$location = $_GET['url'];
header("Location: $location"); 
?>

答案 3 :(得分:0)

首先,您应该验证传递的URL实际上是一个URL,而不是试图将JS注入您的站点的人。

if(filter_var($_GET['url'], FILTER_VALIDATE_URL) !== false) {
    header("Location: " . filter_var($_GET['url'], FILTER_VALIDATE_URL));
}

//Alternatively using JS
if(filter_var($_GET['url'], FILTER_VALIDATE_URL) !== false) {
    echo('<script>
    window.location = ("' . filter_var($_GET['url'], FILTER_VALIDATE_URL) . '");
    </script>');
}