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

Материал из Umicms
Версия от 19:25, 26 сентября 2010; VITL' (обсуждение | вклад) (Новая страница: «При подобном запросе _http://ваш_сайт/robots.txt , выполняется файл sbots.php, который в свою очередь по…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

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