场景:我想检测我的访问者来自哪个网站的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
发布于 2014-06-20 08:32:35
这是一个纯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>发布于 2014-06-20 10:31:50
问题是脚本的引用者是包含脚本的页面。不是你在进入那一页之前的那一页。
你能做的就是:
<script type="text/javascript" src="ref.php?referer=<?php
echo urlencode($_SERVER['HTTP_REFERER']);
?>"></script>然后您可以免费访问$_GET['referer'],而不是在ref.php中访问$_SERVER['HTTP_REFERER'] :)
发布于 2014-06-20 08:06:02
如果您使用mor_rewrite重定向到您的ref.php,则HTTP_REFERER将为空。如果这样做,您可以向.htaccess添加如下代码:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !www.example.com [NC]
RewriteRule \.php$ - [F,NC]如果使用ajax,也应该自己发送Referer报头。诸若此类。如果Referer没有退出,那么请不要发送它,您应该自己添加Referer标头
https://stackoverflow.com/questions/24322570
复制相似问题