2009-07-24 88 views
2

我想写一个sitemap.php根据谁在寻找不同的行为。php爬虫检测

我想将抓取工具重定向到我的sitemap.xml,因为这将是最新的页面,并将包含他们需要的所有信息,但我希望我的常规读者能够在php页面上显示html站点地图。

这将全部从php头部控制,我发现this code在网络上看起来应该起作用,但事实并非如此。任何人都可以帮我解决这个问题吗?

function getIsCrawler($userAgent) { 
    $crawlers = 'firefox|Google|msnbot|Rambler|Yahoo|AbachoBOT|accoona|' . 
    'AcioRobot|ASPSeek|CocoCrawler|Dumbot|FAST-WebCrawler|' . 
    'GeonaBot|Gigabot|Lycos|MSRBOT|Scooter|AltaVista|IDBot|eStyle|Scrubby'; 
    $isCrawler = (preg_match("/$crawlers/i", $userAgent) > 0); 
    return $isCrawler; 
} 

$iscrawler = getIsCrawler($_SERVER['HTTP_USER_AGENT']); 

if ($isCrawler) { 
    header('Location: http://www.website.com/sitemap.xml'); 
    exit; 
} else { 
    echo "not crawler!"; 
} 

它看起来很简单,但你可以看到我已经添加到Firefox的代理列表中,果然我没有被重定向..

感谢所有帮助:)

回答

11

你有一个错误在你的代码:

$crawler = getIsCrawler($_SERVER['HTTP_USER_AGENT']); 

应该

$isCrawler = getIsCrawler($_SERVER['HTTP_USER_AGENT']); 

如果您使用通知进行开发,您将更容易捕获这些错误。

此外,你可能想exitheader

警告后:隐形可以让你与搜索服务提供商的麻烦。 This article解释了原因。

+2

+1的通知,建议 – Eineki 2009-07-24 10:07:58

+0

+1的Eineki ... – 2009-07-24 10:08:45

+0

卫生署!我不能相信我错过了这一点。对通知也有好的建议,应该这样做。 – MrFidge 2009-07-24 10:42:37