Robots.txt на каждый домен

Материал из Umicms
(перенаправлено с «Robots.txt на каждый домен (2.8)»)
Перейти к:навигация, поиск

Информация в данной статье применима только для версий системы 2.8.* и выше.

При подобном запросе _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.

Если вам необходимо не добавлять данные к системному robots.txt, а заменять, то в case-ах можно использовать такой код:

$robots_file = "robots" . $domain->getId() . ".txt"; 
echo file_get_contents($robots_file);
exit;