HTTP_REFERER无法在javascript src上运行

时间:2014-06-20 07:57:16

标签: javascript php

场景:我想检测访问者来自哪个网站来自javacript SRC。

来自google.com的访客---->我的网站(检测访问者是否来自谷歌)

<script type="text/javascript" src="ref.php"></script>

refer.php

<?php
if (strstr($_SERVER['HTTP_REFERER'], 'google.com') !== false) {
    header("Location: http://mywebsite.com/organic-traffic.js");
} 
else {
    header("Location: http://mywebsite.com/frequent-visitors.js");
}
?>

以上PHP代码不起作用。但是如果我使用普通的javascript“ document.referrer ”就会检测到它。

如果我直接访问文件 ref.php ,则也会检测到引用。看起来它将我的网站作为推荐而不是google.com

3 个答案:

答案 0 :(得分:1)

问题是脚本的引用是包含脚本的页面。在访问该页面之前,不是您来自的页面。

你能做的是:

<script type="text/javascript" src="ref.php?referer=<?php
    echo urlencode($_SERVER['HTTP_REFERER']);
?>"></script>

然后您可以在$_GET['referer']内免费访问$_SERVER['HTTP_REFERER']而不是ref.php:)

答案 1 :(得分:0)

如果你使用mor_rewrite重定向到你的ref.php,HTTP_REFERER将为NULL。如果你这样做,你可以像这样在.htaccess中添加一些代码:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !www.example.com [NC]
RewriteRule \.php$ - [F,NC]

如果您使用ajax,您也应该自己发送Referer标头。 等等。如果Referer没有执行,那么请求发送没有它,你应该只是自己添加Referer标题

答案 2 :(得分:0)

这是一个纯粹的JavaScript解决方案,正如您所要求的那样

(document.referrer.match(/^https?:\/\/([^\/]+\.)?google\.com(\/|$)/i))
    ? document.write("\<script src='http://domain/hello-google.js' type='text/javascript'>\<\/script>"); 
    : document.write("\<script src='http://domain/hello-kitty.js' type='text/javascript'>\<\/script>");

第一次更新

好吧,如果您想从PHP文件或代码段中执行此操作,那么您可以这样做

<script type="text/javascript" src="
<?php
if (preg_match('/^https?:\/\/([^\/]+\.)?google\.com(\/|$)/', $_SERVER['HTTP_REFERER'])){
    echo "http://domain/hello-google.js"; 
}else{
    echo "http://domain/hello-kitty.js"; 
}   
?>"></script>

我认为您希望加载不同的.js文件,具体取决于引荐来源,但不会重定向到.js文件,因为它没有任何意义。

第二次更新

只是另一个愚蠢的事情;不知怎的,我相信你只是将我的代码片段放入你的ref.php,但它不会那样工作 - 因为你包含PHP文件你的第一行(javascript指令)应该是这样的

<script type="text/javascript" src="<?php include('ref.php'); ?>"></script>