Для того чтобы в мульти-инсталляциях поисковики находили robots.txt делается следующее:
в корневой папке мульти-инстяллации, допустим это (как видно в ftp)
/multi/
Для начала в корневой папке создается файл robots.php со следующим содержанием:
header('Content-type: text/plain');
$robotstxt = "sites/" . $_SERVER['HTTP_HOST'] . "/robots.txt";
echo file_get_contents($robotstxt);
?>
(Этот скрипт берёт имя запрашивоемой домены, "лепит"(строка номер 2) из неё
"sites/" + "imja domeny" + "/robots.txt"
путь к фаилу который надо считать ( robots.txt ), считывает его, и выдаёт всё "на экран" (строка 3), выдавая в свою очередь до этого http-заголовок о том, что информация, которая последует будет в текстовом формате (строка номер 1).)
Затем в папке интересующего нас сайта, допустим http://dsl.by/, создается/копируется файл "robots.txt" с его содержанием:
/multi/sites/dsl.by/robots.txt:
#
User-agent: *
Crawl-delay: 10
# Directories
Disallow: /database/
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /sites/
Disallow: /themes/
Disallow: /scripts/
Disallow: /updates/
Disallow: /profiles/
#
# Paths (clean URLs)
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /logout/
Disallow: /node/add/
Disallow: /search/
Обязательно вписывай имя домены в комментарий robots.txt, как для контроля, так и для того, чтобы не запутаться.
И последним шагом в корневой папке мулти-инсталляции редактируется файл
.htaccess
В него вписывается следующая директива (директивами мы называем приказы вебсерверу):
RewriteRule ^robots.txt$ http://%{HTTP_HOST}/robots.php [R=302,L]
Эта директива означает следующее:
"Переведи запрос на файл robots.txt на URL по типу http://%{имя запрашиваемой домены}/robots.php выдавая при этом код статуса 302 протокола хттп"
Код статуса 302 oznachet "Found", т.е. "нашёл".
Это можно представить себе в виде следующего диалога:
Поисковик: вебсервер, дай файл robots.txt с домены dsl.by
Вебсервер: есть такой файл, но у меня есть директива дать тебе файл robots.php с домены dsl.by
Поисковик: ок
Вебсервер: (дает файл, выдает http-code 200)
.htaccess: 12331276312612google.html & Co
Для того чтобы в мульти-инсталляциях поисковики находили файлы верификации домены google/яндека/yahoo и.т.д типа
213112312312313123google.html
yandex_231327831123123123.txt
y_key_239389123891238901.html
делается сдедуюшее:
в корневой папке мульти-инстяллации, допустим это (как видно в ftp)
/multi/
создается файл
search-engine-controlfile.php
в который вписывается следующее:
header('Content-type: text/plain');
$controlfile = "sites/" . $_SERVER['HTTP_HOST'] . "/" . basename($_REQUEST[file]);
echo file_get_contents($controlfile);
?>
("basename($_REQUEST[file])" означает "базисное имя файла". Например полное имя http://www.vovka.de/path/123.txt". А базисное имя будет тогда "123.txt". Остальная функциональная часть такая-же как и у "robots.php" (см. выше))
Вторым шагом в папке соответствующей домены, допустим dsl.by создаётся файл
google21123123123123.html
(ну или соответсвующий фаил Яндекса или Yahoo)
Полный путь это к этому файлу ( как видно в ftp):
/multi/sites/dsl.by/google21123123123123.html
Затем редактируется файл
.htaccess
В него вписываются следующие директивы:
RewriteRule ^google.*html$ http://%{HTTP_HOST}/search-engine-controlfile.php?file=%{REQUEST_URI} [R=302,L]
RewriteRule ^yandex_.*\.txt$ http://%{HTTP_HOST}/search-engine-controlfile.php?file=%{REQUEST_URI} [R=302,L]
RewriteRule ^y_key_.*\.html$ http://%{HTTP_HOST}/search-engine-controlfile.php?file=%{REQUEST_URI} [R=302,L]
Эти директивы означают следующее (на примере первой):
Переведи любой запрос по типу "google.*html" на файл search-engine-controlfile.php по адресу запрашиваемой домены. При этом передай файлу ( в данном случае это PHP-скрипт, передай "ключ"/"аргумент" "file", где содержимым ключа является имя запрашиваемой домены (%{REQUEST_URI}). При этом выдавай код номер 302 протокола http.
(Точка в "google.*" означает "любой символ" а звёздочка после точки значит что символ слева от неё (звёздочки) может быть повторён любое количество раз).
пример : http://dsl.by/robots.php
© Владимир для drupal.by И drupal.ru
-------------------------------------
- Мультисайтинг – как и зачем , автор jerboa7,
- Мультисайтинг - это просто, автор Макс Кириленко,
- Mультисайтинг. В который раз. автора andron13
- Мультисайтинг на Друпале - это круто! ---- автор andyceo
.
Комментарии
Огромное спасибо за статью, очень полезная! Уже заюзал на своих сайтах. Особенно понравился совет по редиректу для robots.txt.
А для того, чтобы в мульти-инсталляциях поисковики находили файлы верификации домены google/яндека/yahoo и.т.д , можно сделать следующую вещь (и по-моему, она лучше, в чём-то гибче предложенного вами метода):
Произвольный meta-теги и другие теги в head-области HTML страницы
PS: Кстати, offtop, но хочу спросить, где правильнее (логичнее) всего размещать инструкцию инклюда какой-нибудь нужно сторонней библиотеки? Например, я использую библиотеку JpGraph для построения графиков. Отдельный модуль писать нет необходимости. Так где же можно разместить инструкцию require_once ('jpgraph.php'); ? в settings.php?
Очень полезно, спасибо. А вот такой вопрос: как при использовании мультисайтинга запаролить хтаксессом один из сайтов? То есть нужно, чтобы запаролен был только один из, например, трех сайтов...
Сдаётся, что - никак . .haaccess срабатывает на уровне индейца для папок, ещё до всего. Хотя, возможно я и ошибаюсь :).
Чуть не в тему....
А в чем существенное преимущество мультисайтинга?
1) Единое обновление? - Но оно перекрывается неудобством того, что при обновлении будут в offline ВСЕ сайты в связке.
2) Размер установки(лишние файлы)? - При огромной куче модулей размер будет не больше 5-10Mb что об этом говорить несерьёзно.
Зато из минусов:
1) Необходимо быть более внимательным с установками и настройками. Любая ошибка может легко повалить все сайты.
2) Периодические глюки с общими сессиями, сложности с настойкой
3) Любой глюк и ошибки в настройках безопасности(файловой системы) автоматически вызывают проблемы на всех сайтах....
Для решения проблемы с robots.txt при мультисайтинге есть так же модуль robotstxt
Спасибо, полезно.
Спасибо, почти все понял, кроме "google21123123123123.html" этой страницы, что означают эти цифры "21123123123123" ?? Это для каждого сайта - разные, или для гугла все-равно?
На странице https://www.google.com/webmasters/tools есть "Инструменты для веб-мастеров". Они могут использоваться только если подтверждено, что вы являетесь владельцем сайта. Один из способов подтверждения - положить в корень файл, имя которого говорит вам Google. В данном случае - google21123123123123.html. Так что они для каждого сайта разные...
"1) Единое обновление? - Но оно перекрывается неудобством того, что при обновлении будут в offline ВСЕ сайты в связке.
2) Размер установки(лишние файлы)? - При огромной куче модулей размер будет не больше 5-10Mb что об этом говорить несерьёзно."
Представьте, что у вас 20 сайтов... а теперь подумайте, являются ли эти пункты такими уж несерьёзными... ведь обновление, накладывание патчей - это не такая уж минимальная затрата времени даже для одного сайта...
Плюс, с мультисайтингом можно просто сделать для всех сайтов единую аутентификацию... даже не сапределённую, а просто единую... а насчёт недоступности всех сайтов - это уже другой уровень безопасности, так как сайты точно также зависят от хостингов, те от снабжения электричеством, например, от кабелей и тд и тп... полностью безопасную систему можно создать только в замкнутом цикле, без доступа к ней извне и это будет локальная сеть.
1) И все 20 будет в offline... Хотя, возможно некоторые имеют пик посещаемости вечером, некоторые утром. А offline будут все, даже в свои часы пик!
Ошибки у нормального провайдера(тем более отключение электричества) не так часты, как "свои родные" ошибки
2) Единая не всегда хорошо OpenID с лихвой заменит её...
Что быстро все делать - согласен. Что нужно быть ОСОБЕННО внимательным - другой вопрос.
Можно проще - не читать инфу из robots.txt, которые разложены по папкам, а формировать все в одном php-скрипте:
Пример файла robots.php из Drupal 6:
<?php
header('Content-type: text/plain');
echo 'User-agent: *
Crawl-delay: 10'.
//Directories
'
Disallow: /database/
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /sites/
Disallow: /themes/
Disallow: /scripts/
Disallow: /updates/
Disallow: /profiles/'. // Files
'
Disallow: /xmlrpc.php
Disallow: /cron.php
Disallow: /update.php
Disallow: /install.php'. // Paths (clean URLs)
'
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /contact/
Disallow: /logout/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/'. // Paths (no clean URLs)
'
Disallow: /?q=admin/
Disallow: /?q=comment/reply/
Disallow: /?q=contact/
Disallow: /?q=logout/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/'. // Print-version
'
Disallow: /print/
Disallow: /downloads/
Disallow: /mini/'. // rss
'
Disallow: /rss.xml
Disallow: /*/feed$'. // http://d5.drupaldev.ru/node/16176
'
Disallow: /user/register?
Disallow: /user/login?
Disallow: /taxonomy/term*/feed
Disallow: /book/export/html
User-agent: Yandex
.$_SERVER['HTTP_HOST'].'/sitemap.xml';Sitemap: http://'
?>
В .htaccess в корне установки добавить:
Посмотрел модуль - он небольшой, но не вижу смысла использовать доп. модуль, если можно обойтись нормальным решением.
Для подтверждения владения доменом можно использовать такой же прием.
В файл .htaccess добавить:
RewriteRule ^google.*html$ http://%{HTTP_HOST}/controlfile.php?file=%{REQUEST_URI} [R=302,L]
RewriteRule ^yandex_.*\.txt$ http://%{HTTP_HOST}/controlfile.php?file=%{REQUEST_URI} [R=302,L]
RewriteRule ^y_key_.*\.html$ http://%{HTTP_HOST}/controlfile.php?file=%{REQUEST_URI} [R=302,L]
RewriteRule ^WMT-.*\.HTML$ http://%{HTTP_HOST}/controlfile.php?file=%{REQUEST_URI} [R=302,L]
RewriteRule ^LiveSearchSiteAuth.xml$ http://%{HTTP_HOST}/controlfile.php?file=%{REQUEST_URI} [R=302,L]
В корневой папке мульти-инсталляции (допустим это /multi) создается файл controlfile.php:
<?php
<?
header('Content-type: text/plain');
$filename=basename($_REQUEST[file]);
switch ($_SERVER['HTTP_HOST']) {
case 'drupalcookbook.ru':
switch ($filename) {
case 'google876876876.html':
echo '';
break;
case 'WMT-987987987987.HTML':
echo '23234234234234';
break;
case 'y_key_23234234234234.html':
echo '23234234234234';
break;
case 'LiveSearchSiteAuth.xml':
echo '23234234234234';
break;
case 'yandex_23234234234234.txt':
echo '23234234234234';
break;
}
break;
case 'drupalon.ru':
break;
}
?>
Яндекс не видит robots.txt по редиректу.
Альтернатива: http://www.drupal.ru/node/20749
Короче, поставил модуль robotstxt и яндекс увидел таки это файл....
я, может, чего-то не понимаю? зачем для подтверждения владения доменом нужно писать скрипты? Имена файлов для каждого сайта, по идее, должны отличаться друг от друга - так почему же нельзя положить их, по инструкции, в корень? Единственное исключение - подтверждение для Live, но, мне кажется, в этом случае можно в один файл поместить все коды подтверждения..
UPD: с Google, Live и Yahoo всё проще оказалось - там для всех сайтов (если, конечно, они все в одном профиле) код подтверждения один и тот же, т.е. подтверждается не сайт, а вебмастер. Только Яндекс требует отдельного файла для каждого сайта, но они успешно уживаются в одной - корневой - папке.
Подскажите, как быть в моём случае. В htaccess я прописал следующие строки:
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
для того, что бы избавиться от зеркал и перенаправлять все обращения на сайты с www.
После этого вышеприведённый пример не работает, потому что robots.txt ищется в папке, соответственно, с www:
PHP Warning: file_get_contents(sites/www.site.ru/robots.txt) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: No such file or directory in robots.php on line 4
В sites, естественно, домены прописаны без "www": site1.ru и site2.ru.
Как быть? Можно было бы в sites создать дополнительные папки с www, но не хотелось бы создавать лишнего..
Ну и, кстати, хотел ещё спросить.. Зачем перенаправлять запрос сначала в php, а уже оттуда - в robots.txt? Нельзя ли сразу перенаправлять в нужный robots.txt? Или всё дело в заголовках, которые в этом случае не будут корректно прописываться?
На Друпале 5* сделал все как написано в статье! Все заработало сразу, кроме проверочных файлов! И то, как то странно ведет себя, после установки Поисковики увидели проверочные файлы, а через несколько дней подключал еще сайты и уже отказались видеть. Поисковики видят проверочный файл по пути http://мой_домен/search-engine-controlfile/проверочный_файл. Как исправить путь?