Как использовать WordPress Multisite с разными доменными именами?

3 янв. 2017 г., 13:30:30
Просмотры: 55K
Голосов: 36

Я хочу работать с WordPress multisite, но хочу использовать свои собственные имена. Например, мой основной сайт называется example.com. Если я хочу добавить новый сайт в мою мультисайтовую сеть, он будет называться newsite.example.com. Я хочу, чтобы он был newsite.com без example. Есть ли способ достичь этого?

Я слышал о сопоставлении доменов (domain mapping) с помощью плагина, но не знаю, относится ли это к данному вопросу. Если это имеет отношение, я хотел бы узнать, что это такое.

1
Комментарии

Стоит отметить, что для этого без использования плагина потребуется выделенный IP-адрес, по крайней мере, таково мое понимание.

Neal Jones Neal Jones
10 февр. 2017 г. 18:52:36
Все ответы на вопрос 3
3
35

Эта тема часто вызывает путаницу. Возможно, WordPress мог бы лучше направлять пользователей в этом процессе. Хотя, вероятно, мультисайт изначально не предназначался для работы с TLD-доменами.

Итак, сначала необходимо установить WordPress, настроить мультисайт и конфигурировать его как сеть с субдоменами.

Вот пример конфигурации для вашего файла wp-config.php в корневой директории WordPress:

/* Multisite */
define( 'WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
define( 'DOMAIN_CURRENT_SITE', 'www.primary-domain.example' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

А вот базовая конфигурация для файла .htaccess при настройке субдоменов, в корневой директории WordPress:

# BoF WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

# EoF WordPress

Для корректной работы с TLD-доменами потребовались дополнительные настройки в файле wp-config.php:

define( 'COOKIE_DOMAIN', '' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );

Это все специфичные настройки WordPress.

Лично я предпочитаю создать один виртуальный хост Apache для основного домена сети, а затем настроить этот виртуальный хост с псевдонимами доменов. Каждый псевдоним домена будет представлять один из дополнительных сайтов в вашей сети.

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

После правильной настройки всего вышеперечисленного войдите в админ-панель WordPress и перейдите в раздел управления сетью, чтобы добавить новый сайт.

При добавлении сайта система потребует ввести его как субдомен основного домена. Введите временное значение.

После создания сайта найдите его в списке сайтов сети и нажмите "Редактировать". Теперь вы можете полностью изменить доменное имя этого сайта. Именно в этот момент вы указываете настоящее доменное имя для TLD-сайта.

Да, это требует некоторых ухищрений, но метод работает и не требует использования плагинов.

3 янв. 2017 г. 16:38:45
Комментарии

Спасибо, похоже, работает — и действительно требовалась часть с куки. В моём случае я: 1) зарегистрировал новый домен, 2) направил его NS-записи на мой существующий хостинг с WordPress Multisite, 3) в cPanel добавил домен как Add-On Domain, указав корневой каталог таким же, как public_html основного сайта (как вы и сказали; я не пробовал вариант по умолчанию с новым каталогом, так что не уверен, сработал бы он), и 4) изменил URL подсайта с http://oldsubdomain.primarysite.com на http://www.newdomain.com. Пока что, тьфу-тьфу, проблем с DNS не возникло.

Robert Andrews Robert Andrews
6 окт. 2018 г. 23:39:10

Мне нравится этот ответ... но у меня есть проблема. Ваше предложение по изменению .htaccess совпадает с тем, что рекомендует WordPress. Однако, когда я вношу эти изменения, система падает. Есть идеи, почему так происходит?

Debbie Kurth Debbie Kurth
26 июн. 2019 г. 05:07:28

Мне тоже нравится этот способ. Но есть ли риск повреждения сайтов при каждом обновлении WordPress?

Jornes Jornes
17 мар. 2021 г. 17:27:04
1

В WordPress теперь есть статья поддержки по этой теме. По сути, рекомендуемые шаги совпадают с теми, что предложили Дэвид и Майкл:

  1. Настройте запись DNS для доменного имени, указывающую на ваш сервер
  2. Убедитесь, что этот домен зарегистрирован на вашем сервере с виртуальным хостом, указывающим на директорию WordPress
  3. Сгенерируйте и установите SSL-сертификат на сервер, включающий целевой домен (технически это необязательно, но ограничение пользователей HTTP — плохая практика, которая теперь регулярно наказывается низкими SEO-оценками)
  4. Обновите URL сайта в вашем блоге WordPress, чтобы он указывал на новый домен
  5. Если проблемы с куками сохраняются, определите COOKIE_DOMAIN в файле wp-config.php

Основное отличие в том, что вместо оставления домена кук пустым (define( 'COOKIE_DOMAIN', '' );), рекомендуется указать домен, на который пришёл HTTP-запрос:

define('COOKIE_DOMAIN', $_SERVER['HTTP_HOST']);

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

26 февр. 2020 г. 11:27:40
Комментарии

В чем разница между установкой ADMIN_COOKIE_PATH, COOKIEPATH и SITECOOKIEPATH в виде пустой строки, как сделал Майкл? И использованием $_SERVER['HTTP_HOST'] вместо пустой строки для COOKIE_DOMAIN? Не делает ли это систему уязвимой к инъекции HTTP Host заголовка? У меня сработало только изменение COOKIE_DOMAIN, и единственное отличие, которое я заметил, это то, что $_SERVER['HTTP_HOST'] устанавливает домен для cookie в формате .subdomain.domain.tld вместо subdomain.domain.tld (что может быть полезно только если у нас есть еще один уровень поддоменов).

baptx baptx
7 апр. 2021 г. 14:26:30
0

Эта возможность появилась без использования плагинов несколько версий назад (не помню точный релиз, но функция доступна уже довольно давно). Однако если вы начинаете с нуля, вам следует установить WordPress Multisite в режиме поддоменов.

Вам нужно объявить основной URL (вероятно, kevin123.example) как главный URL для сети (multisite). Он хранится в файле wp-config.php в константе DOMAIN_CURRENT_SITE, а сайт (ранее известный как «блог»), использующий этот домен в качестве основного URL, должен иметь ID, указанный в BLOG_ID_CURRENT_SITE. Но это стандартные настройки в процессе обычной установки.

WordPress позволяет указать только поддомен при создании нового сайта. Но после создания сайта вы можете отредактировать его и добавить совершенно произвольное значение для URL сайта. Я описывал это некоторое время назад в этом ответе с несколькими скриншотами: Возможны ли вложенные поддомены в мультисайте с поддоменами?

Вам также может понадобиться установить константу COOKIE_DOMAN в пустое значение в вашем wp-config.php:

define( 'COOKIE_DOMAIN', '' );
3 янв. 2017 г. 13:48:26