2010-12-01 4 views
4

저는 AJAX를 사용하여 전체 사이트를 구축했습니다 (실제로 GWT 임). 또한 Google에서 제안한 AJAX 크롤링을 구현했습니다. 그러나 구현 후, 나는 Yahoo, Bing, Baidu 어느 쪽도 그 계획을 구현하지 않았 음을 발견했다.클라이언트를 찾는 방법은 검색 로봇입니까?

웹 클라이언트를 식별하는 방법이 검색 로봇인지 궁금합니다. 그럴 경우 내가 만든 HTML 스냅 샷이 표시됩니다.

내가 APACHE 레벨에서 식별 할 수 있다면 가장 좋을 것입니다. 그렇다면 mod_rewrite 만 할 수 있습니다. 그러나 PHP 나 GWT에서 그렇게 할 수 있다면 여전히 괜찮습니다.

답변

1

Apache에서는 rewriteRuleRewriteCond%{HTTP_USER_AGENT}과 함께 사용할 수 있습니다.

RewriteCond는 RegExp를 허용하므로 모든 봇과 일치하는 패턴을 사용해야합니다 (acme가 연결된 페이지에서 패턴을 작성하는 방법에 대한 정보를 찾아야합니다).

주의 : 검색 엔진은 봇과 다른 클라이언트에게 다른 내용을 제공하는 페이지에 불이익을 줄 수 있습니다. 당신이 PHP를 사용하는 경우, 당신은 검색 엔진 사용자 에이전트 문자열의 문자열에 대한 $_SERVER['HTTP_USER_AGENT']을 확인할 수 있습니다

2

매우 다양한 검색 엔진이 있으므로 상당히 까다 롭습니다. 나는 이것이 하나의 라이너에서 수행 될 수 없다고 생각한다. PHP가 괜찮 으면 php_browscap.ini을 사용하는 것이 좋습니다 (다른 언어로 제공). 예를 들어 P HPs get_browser()-function과 함께 사용할 수 있습니다.

그런 다음 모든 다른 브라우저 항목과 물론 봇에 대해 확인할 수 있습니다. 내 자신의 코드 조각에서

난 쉽게 적절한 정보를 정기적으로 내 코드에서 얻을 수 (언급 된 browscap 기준) 다음 함수를 사용

function _browser($a_browser = false, $a_version = false, $name = false) 
{ 
$browser_list = 'msie firefox konqueror safari netscape navigator opera mosaic lynx amaya omniweb chrome avant camino flock seamonkey aol mozilla gecko'; 
$user_browser = strtolower($_SERVER['HTTP_USER_AGENT']); 
$this_version = $this_browser = ''; 

$browser_limit = strlen($user_browser); 
foreach ($this->_w($browser_list) as $row) 
{ 
    $row = ($a_browser !== false) ? $a_browser : $row; 
    $n = stristr($user_browser, $row); 
    if (!$n || !empty($this_browser)) continue; 

    $this_browser = $row; 
    $j = strpos($user_browser, $row) + strlen($row) + 1; 
    for (; $j <= $browser_limit; $j++) 
    { 
     $s = trim(substr($user_browser, $j, 1)); 
     $this_version .= $s; 

     if ($s === '') break; 
    } 
} 

if ($a_browser !== false) 
{ 
    $ret = false; 
    if (strtolower($a_browser) == $this_browser) 
    { 
     $ret = true; 

     if ($a_version !== false && !empty($this_version)) 
     { 
      $a_sign = explode(' ', $a_version); 
      if (version_compare($this_version, $a_sign[1], $a_sign[0]) === false) 
      { 
       $ret = false; 
      } 
     } 
    } 

    return $ret; 
} 

// 
$this_platform = ''; 
if (strpos($user_browser, 'linux')) 
{ 
    $this_platform = 'linux'; 
} 
elseif (strpos($user_browser, 'macintosh') || strpos($user_browser, 'mac platform x')) 
{ 
    $this_platform = 'mac'; 
} 
else if (strpos($user_browser, 'windows') || strpos($user_browser, 'win32')) 
{ 
    $this_platform = 'windows'; 
} 

if ($name !== false) 
{ 
    return $this_browser . ' ' . $this_version; 
} 

return array(
    "browser"  => $this_browser, 
    "version"  => $this_version, 
    "platform"  => $this_platform, 
    "useragent" => $user_browser 
); 
} 

function _w($a = '') 
{ 
    if (empty($a)) return array(); 

    return explode(' ', $a); 
} 

예 : 그것을 할

/* 
// Examples 

echo '<pre>'; 
print_r(_browser()); // return array of browser data 

var_dump(_browser('firefox')); // return true if using firefox 
var_dump(_browser('msie', '>= 7.0')); // return true if using IE 7.0 or above else false 
var_dump(_browser('firefox', '< 3.0.5')); // return true if using below firefox 3.0.5 (can check minor version) 
var_dump(_browser(false, false, true)); // return string of name of browser and version 

// To check if Gecko browser is used 
var_dump(_browser('gecko')); 

// version_compared function is used so you can use the same operator syntax 
var_dump(_browser('firefox', 'le 1.5')); 

echo '</pre>'; 
관련 문제