Robots.txt на каждый домен — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «При подобном запросе _http://ваш_сайт/robots.txt , выполняется файл sbots.php, который в свою очередь по…»)
(нет различий)

Версия 19:25, 26 сентября 2010

При подобном запросе _http://ваш_сайт/robots.txt , выполняется файл sbots.php, который в свою очередь подключает файл libs/root-src/sbots.php. Первый запуск sbots.php происходит благодаря записи в основном .htaccess:

RewriteRule ^robots\.txt$  /sbots.php?path=$1%{QUERY_STRING} [L]

в некоторых случаях, необходимо особым образом настроить robots.txt, оставить данные которые формирует UMI.CMS и также добавить некоторые свои настройки. Для выполнения этой задачи изменим запись в .htaccess на:

RewriteRule ^robots\.txt$  /sbots2.php?path=$1%{QUERY_STRING} [L]

а в корне сайта создадим файл sbots2.php следующего содержания:

<?php
	define("CURRENT_WORKING_DIR", str_replace("\\", "/", $dirname = dirname(__FILE__)));
	require CURRENT_WORKING_DIR . '/libs/config.php';
	
	$cmsController = cmsController::getInstance();
	$config = mainConfiguration::getInstance();
	
	$crawlDelay = $config->get('seo', 'crawl-delay');
	$primaryWWW = (bool) $config->get('seo', 'primary-www');
	
	$buffer = outputBuffer::current('HTTPOutputBuffer');
	$buffer->contentType('text/plain');
	$buffer->charset('utf-8');

	$sel = new selector('pages');
	$sel->where('robots_deny')->equals('1');
	
	$rules = "";
	if(sizeof($sel->result) == 0) {
		$rules .= "Disallow: \r\n";
	}
	
	$rules .= "Disallow: /?\r\n";

	foreach($sel->result as $element) {
		$rules .= "Disallow: " . $element->link . "\r\n";
	}
	
	$domain = $cmsController->getCurrentDomain();

	$host = $domain->getHost();
	if($primaryWWW) {
		$host = 'www.' . $host;
	}
	
   switch($domain->getId()){
     case 1:
       $buffer->push("User-Agent: Rambler\r\n");
       $buffer->push($rules . "\r\n");
       break;
     case 2:
       $robots_file = "robots" . $domain->getId() . ".txt"; 
       $buffer->push(file_get_contents($robots_file) . "\r\n");
       break;        
  }
  
	$buffer->push("User-Agent: Googlebot\r\n");
	$buffer->push($rules . "\r\n");
	
	$buffer->push("User-Agent: Yandex\r\n");
	$buffer->push($rules . "\r\n");
	
	$buffer->push("Host: {$host} \r\n");
	
	$buffer->push("Crawl-delay: {$crawlDelay}\r\n");
	
	$buffer->push("User-Agent: *\r\n");
	$buffer->push($rules);

	$buffer->end();
?>

для примера был добавлен новый блок:

switch($domain->getId()){
  case 1:
      $buffer->push("User-Agent: Rambler\r\n");
      $buffer->push($rules . "\r\n");
      break;
  case 2:
      $robots_file = "robots" . $domain->getId() . ".txt"; 
      $buffer->push(file_get_contents($robots_file) . "\r\n");
      break;        
  }

В зависимости от id домена, который можно узнать по следующей ссылке _http://ваш_сайт/admin/config/domains/.xml, отрабатывается свой case.

Вы можете переписать sbots2.php на свое усмотрение, как того требует ваша задача. При обновлении системы файл .htaccess не перезаписывается, поэтому всегда будет отрабатываться файл sbots2.php для формирования robots.txt. Можно создать в корне сайта файлы robots1.txt, robots2.txt и т.д., и подключать их подобному тому как этой сделано во втором case.