2009-07-24 123 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