Robots.txt на каждый домен — различия между версиями
VITL' (обсуждение | вклад) |
Whoa (обсуждение | вклад) м (переименовал «Robots.txt на каждый домен (2.8)» в «Robots.txt на каждый домен») |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 101: | Строка 101: | ||
exit; | exit; | ||
</pre> | </pre> | ||
+ | [[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]] |
Текущая версия на 10:01, 7 июня 2018
Информация в данной статье применима только для версий системы 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;