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

Материал из Umicms
Перейти к:навигация, поиск
Строка 94: Строка 94:
 
Вы можете переписать sbots2.php на свое усмотрение, как того требует ваша задача. При обновлении системы файл .htaccess не перезаписывается, поэтому всегда будет отрабатываться файл sbots2.php для формирования robots.txt.
 
Вы можете переписать sbots2.php на свое усмотрение, как того требует ваша задача. При обновлении системы файл .htaccess не перезаписывается, поэтому всегда будет отрабатываться файл sbots2.php для формирования robots.txt.
 
Можно создать в корне сайта файлы robots1.txt, robots2.txt и т.д., и подключать их подобному тому как этой сделано во втором case.
 
Можно создать в корне сайта файлы robots1.txt, robots2.txt и т.д., и подключать их подобному тому как этой сделано во втором case.
 +
 +
Если вам необходимо не добавлять данные к системному robots.txt, а заменять, то в case-ах можно использовать такой код:
 +
<pre>
 +
$robots_file = "robots" . $domain->getId() . ".txt";
 +
echo file_get_contents($robots_file);
 +
exit;
 +
</pre>

Версия 09:27, 23 сентября 2011

Информация в данной статье применима только для версий системы 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;