使用PHP的$ _SERVER ['HTTP_REFERER']而不识别参数

时间:2014-04-03 00:38:31

标签: php get http-referer

我使用if语句和PHP的$ _SERVER [' HTTP_REFERER']检查用户是否来自主页并执行某些功能,如果他们这样做:

if($_SERVER['HTTP_REFERER'] == htttp://www.example.com {
//some code
}

问题是主页有时会在URL中传递GET变量,PHP的$ _SERVER [' HTTP_REFERER']方法将带有GET变量的URL视为不同的URL,因此除非用户来自主页而不传递GET变量,否则不会触发if函数。

我想在有人来自主页时触发if语句,无论是否传递了GET变量,都会非常感谢任何帮助!

3 个答案:

答案 0 :(得分:5)

最简单的方法是检查HTTP_REFERER 是否以所需的网址开头:

if (strpos($_SERVER['HTTP_REFERER'], 'http://www.example.com') === 0)) {

答案 1 :(得分:2)

@ EmilyShepherd的答案应该有效。

但是,这只会检查域名。这是有利的,因为一些站点允许省略(www。),而其他站点甚至可以通过(https://)和(http://)到达。

if (strpos($_SERVER['HTTP_REFERER'], 'example.com')) {/*If refer contains example.com*/}

顺便说一句,请注意,引用很容易被欺骗。

答案 2 :(得分:1)

您也可以尝试使用此

$url = $_SERVER['HTTP_REFERER'];
$data = parse_url($url);
$referer= $data['host'];

if($referer== 'www.example.com') {
    // Some codes here
}

/*
var_dump($data);
Array
(
    [scheme] => http
    [host] => www.example.com
    [path] => /path/to/
    [query] => here=there
)
*/

有了这个,您甚至可以提取引用的路径和查询字符串。

注意:如果您的方案可能是http的{​​{1}},那么最好只提取https的主机名进行匹配。