我想过滤HTTP_REFERER的访客来我的网站从搜索引擎。我想忽略存储来自搜索引擎的访问者的HTTP_REFERER信息。你能帮我修改一下PHP脚本吗?
我有这个,但不是正确的脚本:
<?
$exp_list = array('google', 'yahoo');
// exapmple of one HTTP_REFERER link from the Goggle search engine
$link = 'http://www.google.com/search?hl=ru&source=hp&q=bigazart&aq=f&aqi=&aql=&oq=&gs_rfai=';
for ($j = 0; $j < sizeof($exp_list); $j++){
if(!eregi($exp_list[$j], $link)){
// storing link to mysql...
break;
}
}
?>发布于 2010-08-07 01:10:52
尝试如下所示:
if (isset($_SERVER['HTTP_REFERER'])) {
$host = strtolower(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST));
$exp_list = array('google', 'yahoo');
$pattern = '/^(?:www\.)?(?:'.implode('|', array_map('preg_quote', $exp_list)).')\./'
if (preg_match($pattern, $host)) {
// match found
}
}重要的事情:
$_SERVER['HTTP_REFERER']是否存在parse_url从网址获取主机仅在此处搜索但这仍然会错误地标识www.google.example.com这样的主机。因此,您可能还希望指定顶级/二级域名。
发布于 2010-08-07 01:19:13
您应该能够自定义下面的模式以匹配更多的域。
<?php
$ignore_hosts = array(
'/^www.google.com$/',
'/^www.yahoo.com$/'
);
$host = parse_url($_SERVER['HTTP_REFERRER'], PHP_URL_HOST);
$ignore = FALSE;
foreach ($ignore_hosts as $pattern) {
if (preg_match($pattern, $host) == 0){
$ignore = TRUE;
break;
}
}
if (! $ignore)
echo "Here you should store the referrer.";https://stackoverflow.com/questions/3426026
复制相似问题