我正在尝试重定向到另一个页面作为参数传递的网址。
<?PHP $location = urlencode($_GET['url']); ?>
<script>
window.location = ("<?PHP echo $location; ?>");
</script
问题不是重定向到外部站点,而是认为编码的URL字符串是相对于当前目录的文件名。
如何让它重定向到正确的位置?
答案 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>');
}