Многосайтовость на wordpress
Пятница, 25 сентября 2009 г.
Просмотров: 5363
Подписаться на комментарии по RSS
Нашел в интернете очень полезную статью о том как сделать на одном движке от wordpress несколько сайтов, при этом использовав 1 базу данных.
Это полезно, если у хостера имеются определенные ограничения на количество БД.
есть экономное решение – использовать одну установленную систему Wordpress. Первый случай может пригодиться, когда
у вас есть несколько блогов на хостинге и вы просто добавляете новые проекты, то есть не требуется обновление старых, доработка плагинов и т.п. Они как работали, так и продолжают работать. Второй вариант лучше использовать, если вы изначально планируете создавать сетку блогов или просто несколько простых проектов. Ведь часто кроме ограничения на количество БД у хостеров есть лимиты на занимаемое дисковое пространство – смысл тратить его на одни и те же файлы, плагины.
Кроме того, вы получите хорошую
экономию по времени – обновлять плагины можно будет в одном месте, хотя
не уверен насчет дальнейшей их активации по отдельности. На самом деле
процесс достаточно прост. Используется трюк, как и в прошлой статье,
поэтому можете ее прочитать для общего развития.
Первым делом необходимо настроить домены блогов
дабы они ссылались в один и тот же каталог. Внимание, я рассказываю как
все работает у моего хостера, поэтому не могу на 100% гарантировать
такой же алгоритм у вас. Если возникнут вопросы, проще всего обратиться
в их службу поддержки (собственно, я так и поступал). Так вот,
допустим, есть 3 сайта – site1.ru, site2.ru, site3.ru. При создании их
на хостинге, скорее всего, для каждого будет выделена отдельная папка
на FTP. Суть метода – направить все домены в одну (главную директорию).
Для этого используются алиасы. В админке hqhost, например это выглядит приблизительно так:

Для каждого сайта (домена) редактируем
алиасы – для второстепенных (site2.ru, site3.ru) убираем и добавляем их
к основному (site1.ru). Пожалуй, повторюсь, если вы мало что поняли в
моих словах – лучше обратиться в тех. поддержку хостера, там должны
помочь![]()
Итак, в результате этой процедуры
каждый сайт будет «смотреть» в одну директорию – главного блога. Именно
туда мы заливаем все исходники Wordpress, плагины, шаблоны. После этого
заходим в файл wp-config.php, где находим строку $table_prefix
= ‘wp_’; Она задает префикс для таблиц блога, нужно сделать так, чтобы
генерировались разные префиксы в зависимости от домена. Для этого
используем код:
<span style="color: rgb(0, 0, 136);">$prefix</span> <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 136);">$_SERVER</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">"HTTP_HOST"</span><span style="color: rgb(0, 153, 0);">]</span>; <span style="color: rgb(0, 0, 136);">$prefix</span> <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(153, 0, 0);">str_replace</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 255);">"www."</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 255);">""</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 136);">$prefix</span><span style="color: rgb(0, 153, 0);">)</span>; <span style="color: rgb(0, 0, 136);">$prefix</span> <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(153, 0, 0);">str_replace</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 255);">"-"</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 255);">""</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 136);">$prefix</span><span style="color: rgb(0, 153, 0);">)</span>; <span style="color: rgb(0, 0, 136);">$prefix</span> <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(153, 0, 0);">str_replace</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 255);">"."</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 255);">""</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 136);">$prefix</span><span style="color: rgb(0, 153, 0);">)</span>; <span style="color: rgb(0, 0, 136);">$table_prefix</span> <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 136);">$prefix</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 255);">"_"</span> ;
В итоге вместо wp_ получим префикс site1ru_, site2ru_ и т.п. Можете в последней строке добавить любые символы, например:
<span style="color: rgb(0, 0, 136);">$table_prefix</span> <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 255);">"wp"</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 136);">$prefix</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 255);">"_"</span> ; <span style="color: rgb(102, 102, 102); font-style: italic;">// получим wpsite1ru_</span>
Теперь каждый раз, когда вы будете
заходить по тому или иному домену, вы будете видеть тот сайт (блог),
который ему соответствует. Поскольку все настройки системы хранятся в
БД, то настраивать каждый проект придется по отдельности. Это же
касается шаблонов – загружаете все в одну папку, а для блогов выбираете
разные.
Работаться в данном методе мне здорово помогла статья в проекте Блог Awtor . Автор пошел еще дальше и дополнил данную установку важными деталями. Речь идет о файлах Robots.txt и sitemap.xml - ведь
для каждого сайта они должны быть разные. Для решения этой проблемы
создается несколько файлов с идентичными названиями (структурой)
robots-site1.ru.txt, robots-site2.ru.txt и sitemap-site1.ru.xml,
sitemap-site2.ru.xml. Далее файл .htaccess дополняем конструкцией:
<span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_FILENAME} /robots.txt$ [NC]
<span style="color: rgb(0, 0, 127);">RewriteRule</span> ^ /robots-%{HTTP_HOST}.txt [L]
<span style="color: rgb(0, 0, 127);">RewriteCond</span> %{REQUEST_FILENAME} /sitemap.xml$ [NC]
<span style="color: rgb(0, 0, 127);">RewriteRule</span> ^ /sitemap-%{HTTP_HOST}.xml [L]Теперь при заходе с разных URL адресов будут выбираться нужные файлы.
Еще автор советует для загрузки
изображений создавать разные папки в uploads, которые потому указывать
в настройках блога. Также он замечает, что в процессе работы возникают
нерешенные проблемы с некоторыми плагинами: watermark, md5,
дополнительное кеширование. В принципе, в 95% случаев, думаю, без них
можно обойтись, поэтому данный момент не столь критичен. Если
создавать, например, простые сателлиты, то хватит и стандартного набора
плагинов.
Вот, кстати, нашел в сети еще один вариант
реализации нескольких сайтов на одном движке wordpress. Там подход
несколько иной, позволяющий для каждого сайта использовать отдельный
конфиг файл. А это значит, что теоретически можно под одной админкой
объединить даже сайты с разных баз данных.
Также в процессе поиска решения наткнулся на статью с официального сайта, где собраны различные реализации для нескольких проектов – от блогохостингов до целых блого-ферм.
ИсточникЕще записи по теме
- Плагин генератор keywords для Neutrino Atomic Edition
- Драйвера и аппаратное ускорение для intel GMA 500 (часть1)
- Время последней индексации страниц поисковиками
- Постер в соц закладки
- Следим за реферерами сайта
- Тестирование видеофайлов HD качества (720i(p) и 1080p) на нетбуке Acer Aspire One 751h-52Bk с intel GMA 500 (часть2)
- Самодельная втулка для закрепления багажника на велосипеды серии Avalanche фирмы GT. (GT Avalanche 2.0)
Комментариев: 3
Здравствуйте!
Я сделала все, как здесь написано. Поддомены переадресовываются в одну папку, но блоги не устанавливаются по отдельности. Стоит мне установит блог с одного адреса, на всех остальных отображается то же самое.
Подскажите, в чем может быть причина и как сделать так, чтобы каждый блог был отдельный?
спасибо
Думаю у вас какието проблемы с файлами конфига wp-config.php
можно попробовать сделать отдельный конфиг, для отдельного сайта.
Для этого нужно в файле .htaccess дописать строки
RewriteCond %{REQUEST_FILENAME} /wp-config.php$ [NC]
RewriteRule ^ /wp-config-%{HTTP_HOST}.php [L]
а сам файл wp-config.php оставить стандартный.
Далее нужно установить блог повторно, чтобы сохранить настройки в файл wp-config.php, далее после завершения установки сайт не будет работать, а будет предлогать установить блог по новой, так как настроек конфига для этого сайта еще нету.
Чтобы сайт зараюботал нужно файл wp-config.php переименовать в
wp-config-ваш-сайт.php и тогда по идее должно все заработать.
Так нужно будет проделать для каждого сайта отдельно.
Я пробовал данный метод и у меня все работало.
а нельзя ли поступить проще и при инсталляции WordPress указать разные индексы баз данных?