Мультисайтинг на Drupal 8

Одна из фич, на которую я плотно подсел еще на Drupal 7 - это мультисайтинг. Расскажу как настроить мультисайтинг для Drupal 8.

  1. У нас есть два подопытных сайта www.site-one.ru и www.site-two.ru, у каждого соответсвенно по базе данных: db-one и db-two.
  2. В каталоге нашего сайта d8/sites создадим два каталога для каждого из хостов: d8/sites/site-one и d8/sites/site-two.
  3. Создаем каталоги для файлов: d8/sites/site-one/files и d8/sites/site-two/files.
  4. Скопируем файл default.settings.php в каталоги хостов и переименуем их в settings.php.
  5. Отредактируем settings.php файлы и добавим в них конфиг базы данных, на примере d8/sites/site-one/settings.php:
$databases['default']['default'] = array (
  'database' => 'db-one', 
  'username' => 'user-db-one',
  'password' => 'pass-user-db-one',
  'prefix' => '',
  'host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

Осталось скопировать и отредактировать файл d8/sites/example.sites.php. Переименуем его в drupal-8/sites/sites.php и добавим в него наши хосты:

$sites = array(
 'site-one' => 'site-one.ru', // Каталог => Домен.
 'site-two' => 'site-two.ru',
);

На этом, можно тестировать сайта в мультисайтинге Drupal 8. Так же стоит здесь отметить, что конфиг drupal-8/sites/sites.php можно не использовать, если каталоги файлов называть по их доменным именам, тогда мультисайтинг Drual 8 сам распознает входящие запросы и перенаправит их нужному домену.

Файлы robots.txt в мультисайтинге Drupal 8

Файл robots.txt по умолчанию в Drupal 8 один и лежит он в корне сайта. В моей конфигурации в nginx за его передачу отвечает инструкция.

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

Естественно в мультисайтинге, с такой конфигурацией, для всех доменов будет передаваться один и тот же файл. Есть два варианта решения проблемы, а поможет в этом всего она инструкция. Немного исправим наш конфиг и допишем одну строчку:

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    try_files /sites/mydomain/files/robots.txt @rewrite;
}

Вместо mydomain нужно указать каталог сайта. Все, теперь можно файл robots.txt положить в /sites/mydomain/files/ для каждого домена в мультисайтинге. Те, кто больше любят ковырять админку, могут установить модуль Robotstxt и тогда наполнение для файла robots.txt будет подтягиваться из админки.

Комментарии