我想过滤访问者从搜索引擎访问我的网站的 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;
}
}
?>
尝试这样的事情:
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
从 URL 获取主机,以便仅在那里搜索但这仍然会错误地识别像 www.google.example.com 这样的主机。所以您可能还想指定顶级/二级域名。
您应该能够自定义以下模式以匹配更多域。
<?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.";