【问题标题】:php crawler detectionphp爬虫检测
【发布时间】:2009-07-24 09:57:04
【问题描述】:

我正在尝试编写一个 sitemap.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 添加到代理列表中,果然我没有被重定向..

感谢您的帮助:)

【问题讨论】:

    标签: php web-crawler


    【解决方案1】:

    你的代码有错误:

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

    应该是

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

    如果您在开发时使用通知,您将更容易发现这些错误。

    另外,你可能想在header 之后exit

    警告伪装会让您在搜索提供商方面遇到麻烦。 This article 解释了原因。

    【讨论】:

    • 噢!不敢相信我错过了。关于通知的好建议也应该这样做。
    【解决方案2】:

    【讨论】:

    • 不错 - 这是一种巧妙的做法。不幸的是,这个网站是在 IIS 而不是 apache 上开发的 - 所以没有我可以使用的 htaccess 或类似的东西:x
    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2012-09-24
    相关资源
    最近更新 更多