场景:我想检测访问者来自哪个网站来自javacript SRC。
来自google.com的访客----&gt;我的网站(检测访问者是否来自谷歌)<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
答案 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>