php爬虫检测

MrF*_*dge 2 php web-crawler

我正在尝试编写一个sitemap.php,根据谁在寻找,它的行为会有所不同.

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

这将全部由php标头内部控制,我在网上找到了这个代码,它看起来应该有用,但事实并非如此.任何人都可以帮我解决这个问题吗?

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!";
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助 :)

Gre*_*reg 11

您的代码中有错误:

$crawler = getIsCrawler($_SERVER['HTTP_USER_AGENT']);
Run Code Online (Sandbox Code Playgroud)

应该

$isCrawler = getIsCrawler($_SERVER['HTTP_USER_AGENT']);
Run Code Online (Sandbox Code Playgroud)

如果您在通知中发展,您将更容易捕获这些错误.

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

警告:伪装可能会让搜索提供商遇到麻烦.本文解释了原因.