Несколько блогов на одном движке WordPress и с одной БД

Thursday, 09 Apr 09 в 22:51

wordpressНедавно я рассказывал как сделать несколько WordPress блогов с одной базой данных. Это полезно, если у хостера имеются определенные ограничения на количество БД. Но есть еще более экономное решение – использовать одну установленную систему WordPress. Первый случай может пригодиться, когда у вас есть несколько блогов на хостинге и вы просто добавляете новые проекты, то есть не требуется обновление старых, доработка плагинов и т.п. Они как работали, так и продолжают работать. Второй вариант лучше использовать, если вы изначально планируете создавать сетку блогов или просто несколько простых проектов. Ведь часто кроме ограничения на количество БД у хостеров есть лимиты на занимаемое дисковое пространство – смысл тратить его на одни и те же файлы, плагины.

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

Первым делом необходимо настроить домены блогов дабы они ссылались в один и тот же каталог. Внимание, я рассказываю как все работает у моего хостера, поэтому не могу на 100% гарантировать такой же алгоритм у вас. Если возникнут вопросы, проще всего обратиться в их службу поддержки (собственно, я так и поступал). Так вот, допустим, есть 3 сайта – site1.ru, site2.ru, site3.ru. При создании их на хостинге, скорее всего, для каждого будет выделена отдельная папка на FTP. Суть метода – направить все домены в одну (главную директорию). Для этого используются алиасы. В админке hqhost, например это выглядит приблизительно так:

алиасы для доменов

Для каждого сайта (домена) редактируем алиасы – для второстепенных (site2.ru, site3.ru) убираем и добавляем их к основному (site1.ru). Пожалуй, повторюсь, если вы мало что поняли в моих словах – лучше обратиться в тех. поддержку хостера, там должны помочь:)

Итак, в результате этой процедуры каждый сайт будет «смотреть» в одну директорию – главного блога. Именно туда мы заливаем все исходники WordPress, плагины, шаблоны. После этого заходим в файл wp-config.php, где находим строку $table_prefix  = ‘wp_’; Она задает префикс для таблиц блога, нужно сделать так, чтобы генерировались разные префиксы в зависимости от домена. Для этого используем код:

$prefix = $_SERVER["HTTP_HOST"];
$prefix = str_replace("www.", "", $prefix);
$prefix = str_replace("-", "", $prefix);
$prefix = str_replace(".", "", $prefix);
$table_prefix = $prefix."_" ;

В итоге вместо wp_ получим префикс site1ru_, site2ru_ и т.п. Можете в последней строке добавить любые символы, например:

$table_prefix = "wp".$prefix."_" ; // получим wpsite1ru_

Теперь каждый раз, когда вы будете заходить по тому или иному домену, вы будете видеть тот сайт (блог), который ему соответствует. Поскольку все настройки системы хранятся в БД, то настраивать каждый проект придется по отдельности. Это же касается шаблонов – загружаете все в одну папку, а для блогов выбираете разные.

Работаться в данном методе мне здорово помогла статья в проекте Блог Awtor. Автор пошел еще дальше и дополнил данную установку важными деталями. Речь идет о файлах Robots.txt и sitemap.xml - ведь для каждого сайта они должны быть разные. Для решения этой проблемы создается несколько файлов с идентичными названиями (структурой) robots-site1.ru.txt, robots-site2.ru.txt и sitemap-site1.ru.xml, sitemap-site2.ru.xml. Далее файл .htaccess дополняем конструкцией:

RewriteCond %{REQUEST_FILENAME} /robots.txt$ [NC]
RewriteRule ^ /robots-%{HTTP_HOST}.txt [L]
RewriteCond %{REQUEST_FILENAME} /sitemap.xml$ [NC]
RewriteRule ^ /sitemap-%{HTTP_HOST}.xml [L]

Теперь при заходе с разных URL адресов будут выбираться нужные файлы.

Еще автор советует для загрузки изображений создавать разные папки в uploads, которые потому указывать в настройках блога. Также он замечает, что в процессе работы возникают нерешенные проблемы с некоторыми плагинами: watermark, md5, дополнительное кеширование. В принципе, в 95% случаев, думаю, без них можно обойтись, поэтому данный момент не столь критичен. Если создавать, например, простые сателлиты, то хватит и стандартного набора плагинов.

Вот, кстати, нашел в сети еще один вариант реализации нескольких сайтов на одном движке wordpress. Там подход несколько иной, позволяющий для каждого сайта использовать отдельный конфиг файл. А это значит, что теоретически можно под одной админкой объединить даже сайты с разных баз данных.

Также в процессе поиска решения наткнулся на статью с официального сайта, где собраны различные реализации для нескольких проектов – от блогохостингов до целых блого-ферм.

P.S. Я сейчас не в Киеве, поэтому не отвечаю на письма и не модерирую комментарии, приеду в субботу – все сделаю.

Доверьте создание сателлитов профессионалам – качественные оригинальные тексты, дизайн. Разработка проектов под ключ.

Смотрим креативные и яркие дизайны сайтов для вдохновения.

Желающих похудеть – гречневая диета.

Понравился пост? Подпишись на обновления блога по RSS для блоггеров и вебмастеровRSS, RSS для блоггеров и вебмастеровEmail или twitter для блоггеров и вебмастеровtwitter!
Добавить комментарий

Комментариев - 25 для данного поста

  1. Lesso Пишет:

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

  2. Valentin Пишет:

    Проблема может возникнуть с плагинами, которые при обновлении себя до новой версии вносят изменения в базу. Т.к. при обновлении изменения затронут только активную базу, то в других сайтах обновленные файлы плагинов не найдут изменения в базе. Но думаю таких не много.

  3. Tod Пишет:

    Lesso, с Сапой я пока не задумывался. Как придет время, тоже загляну на их форум в поисках ответа, либо в тех.поддержку. Уверен, подобные “сборки” люди уже используют. С другой стороны нужно быть осторожным – здесь один ip, и если продавать кучи ссылок, сайты скорее всего пойдут в бан.

    Valentin, хм, тоже правильное замечание. В таком случае нужно будет придумать какие-то хитрости чтобы обновить БД для всех сайтов. Хотя, в принципе, это весьма трудоемко, да и использовать такие конструкции лучше для простых проектов – где минимум функциональности. Те же сателлиты.

  4. Lesso Пишет:

    Насчёт ip не уверен, ну если 100 штук дклать, то да, нe у одного моего хостера 1 ip, и что, на нём хостится 100+ площадок, да и не думаю, что та же agava раздаёт каждому по отдельному ip адресу, поэтому это всё спорные моменты.

  5. Анна Пишет:

    хочу сделать вышеописанное со своими поддоменами. не получается. во-первых, в какой папке они должны быть? например, у меня основной сайт здесь: root/sitecom/www, в www- весь ВП. домен здесь: root/sitecom/subdomain. так надо?
    во-вторых, при создании поддомена в нужной директории или при изменении др. доменов, чтобы они в общую папку обращались, таблицы в БД сами создаются? если да, то после этого при загрузке поддомена в браузере уже должно что-то показыватся, видимо дефолтовая тема ВП?
    в-третьих, каким образом я могу управлять поддоменом из общей админки ВП? где там что нужно менять, чтобы показывало нужный поддомен?

  6. Tod Пишет:

    Анна, речь идет об отдельных доменах, а не субдоменах. Для них я не пробовал ничего такого создавать, возможно там какие-то свои особенности.
    1. Заливать ВП нужно в одну папку – пусть это будет root/sitecom/www и для всех доменов указываете алиасы (чтобы они обращались) к этой самой директории.
    2. После этого заходите по адресам site1.ru и site2.ru и отдельно настраиваете блог (создается БД автоматически). То есть все то же самое, что и при создании одного блога – система как-бы видит для каждого из доменов свой отдельный проект.
    3. Опять же повторюсь, речь не о поддоменах и при заходе в админку вы никак не увидите наличие дополнительных сайтов на этой ВП, куда можно переключиться. Они все никак не связаны.

  7. @ Diplomat Пишет:

    Народ, помогите думаю как реализовать, нужно чтоб 2 домена использовали одну базу. Но в этой базе прописаны url на посты и картинки. Соответсвенно для одного домена нужно на лету менять эти значения с site1.com на site2.com

  8. @ Александр Пишет:

    @Valentin:
    Не уверен. Давайте порассуждаем: вот мы загрузили такой плагин «нехороший». Дальше, что? Мы должны его активировать. Допустим зашли в админку site1. Активировали. Он внес изменение и в админке появились его настройки (если есть). Дальше, что? Ну, можем, например, сразу зайти в админку site2 и… снова активировать его, чтоб он опять внес свои «нехорошие» изменения в таблицы БД.

    Отсюда вывод: теоретизировать хорошо, но эксперемент покажет who is who :) Предлагайте штучки три «нехороших» плагина – поэксперементируем :)

  9. Tod Пишет:

    Diplomat, в настройках блога можно задавать папку из которой берутся картинки – то есть для каждого блога отдельно. Если я правильно понял вопрос.
    Александр, все правильно, нужно просто для каждого сайта заходить в админку и обновлять плагин – это не так сложно.

  10. @ Diplomat Пишет:

    Использовал плагин domain mirror. все работает. Правда теперь захотелось сделать общую базу с комментариями и разным контентом на блогах.. ну это нереально похоже

  11. devul Пишет:

    с сапой вопрос не решенный?

  12. Tod Пишет:

    С сапой, признаться, это все не пробовал, а что могут быть проблемы? Залил на фпт, прописал код в каждом из шаблонов, а сапа уже сама должна определять для какого сайта что делать или нет?

  13. MaximL Пишет:

    Анна – для вашего случая есть специальное решение, оно называется WordPress MU !! Основное
    отличие этого решения и как раз и состоит в том, что оно для поддоменов, а не для отдельных доменов.

  14. Webman Пишет:

    сапа решена уже давно – там в коде можно включить мультисайтинг и к линкс дб будет добавляться префикс вида site1_links.db
    я использовал плагин imoney – он поумолчанию файл сапы обзывает как надо

  15. @ masterseo Пишет:

    Вот чем хорошо или плохо давать в тексте ссылки на другие сайты… В тексте этого поста со слов “еще один вариант” идет ссылка на заметку, которую интересно было бы прочитать, но сайта уже нет как такового и ссылка показывает теперь на что зря. А если бы их метод был полностью описан в тексте этой же заметки (пусть даже со ссылкой на их сайт), то было бы намного лучше. Теперь решение потерялось, наверно.

  16. rvnikita Пишет:

    Интересный вариант решения проблемы, однако есть также вариант, когда мы просто делаем подблог в одной из категорий и немного перенастраиваем движок, как это сделать я описал у себя в блоге в статье Создание подблога в WordPress.

  17. Динар Пишет:

    я знаю еще один способ который оказывается не упомянут в той официальной статье: wpmu с плагином отображения субдоменов на любой домен http://ocaoimh.ie/wordpress-mu-domain-mapping/

  18. @ Romashkin Пишет:

    Попробую, что это за штука такая получится с одним Вордпрессом.

  19. Роман Пишет:

    Написал в суппорт хостинга, т.к. у меня есть только доступ к cPanel. Они ответили вот что:
    “Движок размещаете в папке public_html, а все доменные имена добавляете в паркованные в итоге они будут алиасами на основной домен.”
    Это действительно будет аналогично тому, что описано в этой статье?

  20. Tod Пишет:

    Роман, по идее, да, мне тоже про алиасы говорили для основного домена. Попробуй будет ли это все работать.

  21. Den Пишет:

    А опишите пожалуйста, что такое этот WordPress MU !! .

  22. Tod Пишет:

    WordPress MU – многопользовательская система для нескольких блогов под управлением одной системы. С запуском WordPress 3.0 поддержка WordPress MU была прекращена и весь функционал добавили в стандартный WordPress.

  23. @ Евгений Пишет:

    Спасибо за пост, скажите, а Вы могли бы прокомментировать где-то свой Robots.txt? потому что я посмотрел он у вас как-то своеобразно написан, интересно почитать мысли о Вашем robots.txt

  24. Tod Пишет:

    Евгений, да, надо будет как-то написать про роботс.тхт, у меня в блоге он, видимо, немного устаревший, давно не правил.

  25. @ Евгений Пишет:

    Ну видимо да, так как я к примеру закрыл комментарии фиды, трекбеки, страници регистрации и так далее, а и еще теги закрыл! :)

Оставить комментарий (правила комментирования)