此表达式存在问题:
filter_var($url, FILTER_VALIDATE_URL) !== true
应该或可以写为:
filter_var($url, FILTER_VALIDATE_URL)
因为PHP
manual 对于
filter_var()
表示:
返回过滤后的数据,或FALSE
如果过滤器出现故障。
也就是说,使用有效的URL,filter_var()
不返回布尔值;因此filter_var($url, FILTER_VALIDATE_URL) !== true
从不计算为false
. 一、 e.所有URL都将被视为有效。
所以完整的代码,没有注释:
$url = $_GET["URL"];
// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);
if (filter_var($url, FILTER_VALIDATE_URL)) {
header("location: " . $url);
exit;
} else {
echo("$url is not a valid URL");
}
附加说明要重定向到外部URL/域,需要指定协议—e、 g。
http://
. 在下面尝试
header()
代码,您会理解它:
Code #1:
// Has the protocol; this would always redirect to http://www.google.com
header( \'Location: http://www.google.com\' );
exit;
Code #2:
// Protocol not specified; redirects to a URL on your site. For example,
// if you\'re on http://your-site.com/path, then you\'d be redirected to
// http://your-site.com/path/www.google.com
header( \'Location: www.google.com\' );
exit;