Опять мультисайтинг. Не пойму, почему не получается... Хелп, коллеги!

Главные вкладки

Аватар пользователя Pozniy Pozniy 18 февраля 2007 в 13:31

Привет всем!

Задача: Есть домен, к примеру, my_site.com. Необходимо организовать мультисайтинг с субдоменом my_site.com/another_site (казалось бы простая задачка). База юзеров (БД), скрипты друпала и регистрация - общая. (На самом деле юзаю не Drupal, а vBDrupal и там свои приколы с мультисайтингом, но до них ещё далеко и их очередь на этапе поддержки.)

Доп. инфо: Скрипты Друпала - в рууте (т.е. my_site.com получается вроде как "примари").

Пройденные и текущие этапы: Общая задача мультисайтинга состоит из решения трех этапов:

  1. Конфигурация БД - общая или различные для каждого из сайтов (БД одна, работают префиксы таблиц);
  2. Настройка директорий в site/ (типа в нашем случае это:
    site/default (или site/my_site.com/ ?)
    и
    site/my_site.com.another_site {здесь см. http://drupal.org/node/53705} (или site/another_site/ ? - пробовал всё))
    и настройка конфигов в этих директориях. Ну там, естественно, есть ещё вопрос директорий "темзс", "файлс" и "модулс", но до этого тоже дожить надо;
  3. Вопрос настройки .htaccess;

Моя проблема: Третий этап - .htaccess. При том даже не конкретные инструкции для этого случая, а общая идеология того, что должно быть достигнуто. Ведь по идее создавать физическую папку ../my_site.com/another_site не требуется. Т.е. вызов урла (физически несуществующего адреса) http://my_site.com/another_site должен на самом деле грузить скрипты с http://my_site.com/. Значит Друпал как-то сам должен разобраться, запуская скрипт с руута (или другой директории, где находится общий код), что "подразумевается" алиас (или как это назвать?) my_site.com/another_site и соответственно, попользоваться одноименной директорией (site/my_site.com.another_site) и её конфигом.

Фрагмент инструкций .htaccess, который в рууте, (блок mod_rewrite) для Друпала в http://my_site.com без мультисайтинга, с работающим клианурлс вот:

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteBase /
       
  # Rewrite current-style URLs of the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Попытки подставлять инструкции найденные на Друпал.орг ни к чему толковому не привели. С завидной настойчивостью, и с изменениями в .htaccess, и без них (!), по адресу http://my_site.com/another_site грузится "примари" сайт во всей своей красе (с оформлением, ссылками в меню, названием и т.п.).

Коллеги! Что здесь (.htaccess) нужно поправить, дабы было мне (и, подозреваю, не только мне) счастье ?

Для информации. На Друпал.орг внятного и однозначного ответа на этот вопрос нет, хотя задача решаема. Как ни странно, значительно более толковую инфо можно найти по другой конфигурации мультисайтинга, где общие коды друпала устанавливаются в субдомене /друпал, но при этом вызываются как руут (т.е. по главному урлу сайта), т.е.:

http://my_site.com грузит друпал с http://my_site.com/drupal ,
http://my_site.com/another_site грузит коды тоже с http://my_site.com/drupal , но сохраняя свой корень в урле.
Для этого варианта см. http://drupal.org/node/26434

Для идущих следом, вот наиболее толковые (как на мой взгляд) материалы с орг-а:
http://drupal.org/node/26434
http://drupal.org/node/53705
http://drupal.org/node/25011
http://drupal.org/node/23260
http://drupal.org/node/37177
http://drupal.org/node/69199
http://drupal.org/node/52003
для vBDrupal ещё вот это -
http://www.vbdrupal.org/forum/showthread.php?t=227&highlight=multi-site

хэндбук - http://drupal.org/node/43816

а вот прочее по теме:
http://drupal.org/node/278
http://drupal.org/node/52003
http://drupal.org/node/37177
http://drupal.org/node/22668
http://drupal.org/node/55742
http://drupal.org/node/69199
http://drupal.org/node/62255
http://drupal.org/node/85958
http://drupal.org/node/25011
http://drupal.org/node/10266
http://drupal.org/node/84621
http://drupal.org/node/20663
http://drupal.org/node/83403
http://drupal.org/node/9909
http://drupal.org/node/70861
http://drupal.org/node/277
http://drupal.org/node/49605
http://drupal.org/node/93603
http://drupal.org/node/21234
http://drupal.org/node/14697
http://drupal.org/search/node/multiple+sites+from+single+installation

PS
Что за ненормальная обработка текста между тегами  здесь настроена? Первый раз вижу, что бы с <> так нагло обращались...

Комментарии

Аватар пользователя magway magway 18 февраля 2007 в 17:48

AFAIK, в .htaccess ниче править не надо для мультисайтинга. Просто в каталоге sites создаются подкаталоги с нужным адресом сайта (my_site.com.another_site) и конфигом внутри (в конфиге прописываются префиксы таблиц и, если надо, некоторые настройки). Все. Я таким образом сделал ОЧЕНЬ много сайтов на одном корне.

Аватар пользователя Pozniy Pozniy 18 февраля 2007 в 18:51

Что тут можно сказать? Не под той звездой родился? Ну не идет он у меня так и всё тут. Загружается вариация первого сайта по оформлению и меню, а вместо приветствия Друпала - "Page not found". http://my_site.com/another_site присутствует только в строке браузера. Ссылки во всех меню - http://my_site.com/..... Ну да ладно.

Эти "очень много сайтов" устанавливались на разных хостингах? Clean URLs работал? Даже не знаю, что ещё уточнить...
Для первого сайта:
$base_url = 'http://my_site.com';
для второго:
$base_url = 'http://my_site.com/another_site';
Правильно? (надеюсь наличие/отсутсвие "www." роли не играет)
С префиксами БД и директориями под site/ всё ясно...

Пойти напиться, что ли?...

Аватар пользователя Pozniy Pozniy 7 марта 2007 в 12:55

Через SSH соединение (утилита PuTTY 0.58) создал "симлинк" /another_site - в директории руута выполнил команду:

ln -s . another_site

Мультисайтинг заработал. Действительно, в .htaccess ничего править не пришлось. Да вот беда. Clean URLs работает только на http://my_site.com . При попытке выполнить тест на http://my_site.com/another_site страница редиректится на её аналог первого сайта (т.е. из урла вырезается /another_site).

Дык что в .htaccess всё равно лезть пришлось. Правда, пока без особого толку...

--------------
по поводу толка см. следующий пост.

Аватар пользователя axel axel 19 февраля 2007 в 3:00

>> Что за ненормальная обработка текста между тегами здесь настроена? Первый раз вижу, что бы с <> так нагло обращались...

Используй при вводе формат "BBcode+HTML". По умолчанию выставлен "Wiki+HTML", в нем имеют место некоторые конфликты между фильтрами.

--
Администратор сайта «Drupal — Россия»
на вопросы по Drupal отвечаю только на форумах, не пишите в почту и приватом!

Аватар пользователя Pozniy Pozniy 19 февраля 2007 в 14:39

[offtop] Ох уж эти конфликты. Как они достают в настройке редакторов+фичи...

Кстати, а почему при пользовании тегами CODE (и QUOTE?) визуально блок не выделяется в тексте (только шрифт меняется)? Это от темы зависит?

И ещё почему-то нотифи (или это subscribe/-s?) не работает, не приходят обновления подписанного топика на мыло.

Аватар пользователя MAMONT MAMONT 1 марта 2007 в 14:49

Почитал, каша в голове. Но не увидел (может не внимателен) того что мне бы подошло. Посоветуйче чем нибудь.
Есть сайт http://mysite.com в нем главная страница forum. На нем еще есть модуль modul1 и есть естественно node, которые собственно доступны в меню.
Т.е. один комплект файлов Drupal и одна БД для всего.

Мне поставили задачу разделить сайт таким образом, что бы менялась главная страница в зависимости с какого урла заходят, например:
http://forum.mysite.com на главной странице видим forum, http://modul1.mysite.com на главной странице видим modul1, и на http://mysite.com видим node.

Можно ли это достигнуть только конфигами друпала и донастройкой Апаче? Или нужно менять что либо в ядре Друпала?

Аватар пользователя Krotty@drupal.org Krotty@drupal.org 1 марта 2007 в 16:12

Два варианта - первый проще, второй гибче... Smile
1. Apache - настраиваешь редиректы в .htaccess
2. Drupal - мультисайтинг с разделением таблицы variable, и заданием для каждого из "сайтов" своего значения переменной site_frontpage (через /admin/settings - Site Frontpage)

Аватар пользователя Krotty@drupal.org Krotty@drupal.org 1 марта 2007 в 16:17

Извини, неправильно выразился, таблицу нужно не расшаривать, а наоборот делать различной для разных сайтов, а расшаривать все остальные таблицы
Да, это делается в settings.php путем задания префиксов для различных таблиц сайта. Например:
$db_prefix = array(
'default' => '',
'variables' => 'site1_',
);
в твоем случае будут различаться префиксы для таблицы variables, т.е. у тебя в базе будет две таблицы одна из которых будет использоваться для site1, а другая для site2. Правда этот метод обладает еще одним большим недостатком - все переменные параметры двух сайтов будут различны. И при изменении на одном сайте придется их дублировать в другом, что не есть гуд.

Аватар пользователя MAMONT MAMONT 2 марта 2007 в 17:56

Да всё проче оказалось, без модуля Site Frontpage.

В конфиге определенного сайта просто написал:
$conf = array(
'site_name' => 'My Site Help',
'site_frontpage' => 'help'
);

Спасибо за подсказки Smile

Аватар пользователя Pozniy Pozniy 7 марта 2007 в 12:56

Получилось запустить clean URLs на мультисайтинге (см. предыдущий пост) пользуясь директивами http://drupal.org/node/52003 . Вот так выглядит mod_rewrite раздел в моем .htaccess (между IfModule mod_rewrite.c и /IfModule):

  RewriteEngine on
 
  # Это к делу не относится. Убирает www в урлах.
  RewriteCond %{HTTP_HOST} ^www\.my_site\.com [NC]
  RewriteRule ^(.*)$ http://my_site.com/$1 [L,R=301]

  # Modify the RewriteBase if you are using Drupal in a subdirectory and
  # the rewrite rules are not working properly.
 
  # Получается, что вроде бы как лишняя директива
  #RewriteBase /                        
       
  # для my_site.com/another_site
  RewriteCond  %{HTTP_HOST}  ^my_site.com/another_site$
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule  ^(.*)$ /another_site/?q=$1 [L,QSA]

  # для my_site.com/another_site2
  RewriteCond  %{HTTP_HOST}  ^my_site.com/another_site2$
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule  ^(.*)$ /another_site2/?q=$1 [L,QSA]

  # Здесь ничего не менялось
  # Rewrite current-style URLs of the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]