Перемещение мультисайта WP в подкаталог


20

Во-первых, я прочитал несколько сообщений об этом процессе. Однако по разным причинам процесс остается сложным для реализации или устранения неполадок из-за отсутствия даже абстрактных примеров или, возможно, слишком абстрактных. И есть несколько постов «не могу сделать», за которыми почти всегда следуют «с 3,5, теперь вы можете» предостережения, так что можно ли оставаться неоднозначным, хотя, без сомнения, нетривиальным.

Резюме:

Как переместить многосайтовый WordPress (WPMS) с root.com на root / blogs?

В этом примере мы перемещаем WPMS из «root.com» в «root.com/blogs»

Я понимаю, что мне нужно обновить пути в базе данных и wp-config.php соответственно. Кажется, мне тоже придется обновить .htaccess? Я также знаю о проблеме сериализации с поиском / заменой и обновлениями запросов MySQL.

У меня есть WPMS, которую я обновил до 3.5. Я нашел следующие таблицы с информацией о домене и пути

Существующая рабочая конфигурация перед перемещением в подкаталог

1. wp_blogs

select blog_id, domain, path from wp_blogs;
+---------+-------------+--------+
| blog_id | domain      | path   |
+---------+-------------+--------+
|       1 | root.com    | /      |
|       2 | root.com    | /matt/ |
+---------+-------------+--------+

2. wp_site

select * in wp_site;
+----+-------------+------+
| id | domain      | path |
+----+-------------+------+
|  1 | root.com    | /    |
+----+-------------+------+

3. blog_id соответствует таблицам опций wp _ # _, которые содержат:

select option_name,option_value from wp_2_options 
where option_name = 'home' or option_name = 'siteurl';
+-------------+--------------------------+
| option_name | option_value             |
+-------------+--------------------------+
| home        | http://root.com/matt/    |
| siteurl     | http://root.com/matt/    |
+-------------+--------------------------+

4. В моем wp-config.php у меня есть следующие специфичные для WPMS строки:

define('WP_ALLOW_MULTISITE', true);
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false);
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'root.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

5. Наконец, в моем .htaccess у меня есть:

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

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

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

Обновления, необходимые для перемещения сайта

Мне кажется, что для того, чтобы переместить мой сайт в / blogs, я бы:

1. Обновите wp_blogs до

mysql> update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/');
select blog_id, domain, path from wp_blogs where blog_id < 3;
+---------+-------------+--------------+
| blog_id | domain      | path         |
+---------+-------------+--------------+
|       1 | root.com    | /blogs/      |
|       2 | root.com    | /blogs/matt/ |
+---------+-------------+--------------+

2. Обновите wp_site до

update wp_site set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/');
select * from  wp_site;
+----+-------------+------------+
| id | domain      | path       |
+----+-------------+------------+
|  1 | root.com    | /blogs/    |
+----+-------------+------------+

3. Варианты wp _ # _

+-------------+--------------------------------+
| option_name | option_value                   |
+-------------+--------------------------------+
| home        | http://root.com/blogs/matt/    |
| siteurl     | http://root.com/blogs/matt/    |
+-------------+--------------------------------+

4. wp_config.php

define('WP_ALLOW_MULTISITE', true);
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false);
$base = '/blogs/';
define( 'DOMAIN_CURRENT_SITE', 'root.com' );
define( 'PATH_CURRENT_SITE', '/blogs/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

примечание: мне не ясно, как этот шаг соответствующим образом обновляется

5. .htaccess

Я нашел расплывчатые инструкции "обновить .htaccess соответствующим образом", но не конкретику. Обновить RewriteBase? Какие строки в .htaccess я обновляю при перемещении root.com на root.com/blogs?

В описанном выше процессе отсутствуют пути, найденные в сообщениях. Мои барабанщики должны использовать для этого инструмент поиска и замены, после того как я сделал это более фундаментальным обновлением; или я не прав?

Обновление bungeshea говорит о том, что да, я указываю RewriteBase на подкаталог «блоги», т.е.

RewriteBase /Blogs

Наконец, если вы не знаете о http://interconnectit.com/products/search-and-replace-for-wordpress-databases/, вам следует. Это отлично


3
Отличный вопрос, отличный процесс +1
Кайзер

1
Это только я? Я думаю, что запросы в процессе не являются правильными, update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); скорее должно бытьupdate wp_blogs set path=concat('/blogs',path);
MR

Ответы:


7

Я знаю, что он старый, но я исправил это! я установил WP MU в подпапке. htaccess:

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

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule ^(.*\.php)$ YOUR_SUBFOLDER/$1 [L]
RewriteRule . index.php [L]

wp-config.php:

define( 'WP_ALLOW_MULTISITE', true ); 
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'localhost'); // or your host
define('PATH_CURRENT_SITE', '');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

и в вашей базе данных измените это:

wp_site
domain: localhost (OR your domain but no subdirectory!)
path: /

wp_blogs
domain: localhost (OR your domain but no subdirectory in each blog_id!)
path: /

wp_sitemeta
siteurl: http://localhost/YOUR_SUBFOLDER (replace localhost with your host)

это было невероятно полезно. У меня был установлен поддомен и дамп базы данных и zip сайта. Мне нужно было восстановить его на новом сервере и вручную обновить сайт. Обновления базы данных были самыми необходимыми, которые мне нужно было сделать. Спасибо!
Джейкоб Раккуя

2

Он смотрит на меня , как если бы вы решить свои собственные проблемы - просто следовать вашим шагам 1-4, и шаг 5 обновления RewriteBaseв .htaccess. Для обновления путей в сообщениях мне нравится использовать стерилизованный инструмент Interconnect для поиска и замены .


Спасибо, багша. Как я отмечаю в своем посте, обновите RewriteBase до чего именно, как в приведенном выше примере? Будет ли это: RewriteBase / блог?
Screenack

Да:RewriteBase /blog
карите

Bungshea; сделано, но все еще не работает. По-прежнему появляется сообщение «Ошибка при установлении подключения к базе данных» после всего вышеперечисленного Хуже того, в моем журнале ошибок apache не было ошибок.
Screenack

@Screenack В чем специфика «Ошибка при установлении соединения с базой данных»? Подсказка: посещениеwp-admin
Shea

1

Хорошо, вот что я сделал, и это сработало. Нет подпапки. Сайт был ранее настроен на поддомен.

BACKUP FIRST !!!

wp-config.php (замените этот блок на блок в вашем файле)

define('WP_ALLOW_MULTISITE', true ); 
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'no-www-in-sitename.com'); // your host
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

.htaccess

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

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Теперь в БД SQL:

1) для каждого wp_ (site #) _ tablesuffix перейдите в таблицу параметров и измените siteurl и home на http://www.sitename.com/blogname

2) wp_blogs для каждого blog_id изменить домен с blogname.domain.comна domain.comи путь к/blogname/

3) нет необходимости изменять wp_options siteurl & home или любые ячейки в wp_site или wp_sitemeta, если установка находится в том же месте.

После того, как вы закончите, обязательно перейдите (в админ-панели суперпользователя) в настройки> постоянные ссылки и нажмите Сохранить.

Вуаля!


0

Это мой первый ответ, поэтому будьте внимательны! :)

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

Это то, что у меня сработало в апреле 2018 года, ребята ... Я использовал wp-config от hot_barbara и также использовал .htaccess от них.

Поэтому, пожалуйста, не переходите на подпапку - я не сделал!

ОДНАКО, в SQL DB, это то, что произошло в моем случае - все уже было так, поэтому я не внес никаких изменений:

  1. Домен wp_site: путь xyzabc.com: /

Домен wp_blogs: путь xyzabc.com: /

wp_sitemeta siteurl: h ** ps: //xyzabc.com/

Как я понимаю, вы бы использовали косую черту, если бы она была в ваших настройках.


0

Перепишите ваш wp-config.phpкод

define('SUBDOMAIN_INSTALL', false);

вместо того define('SUBDOMAIN_INSTALL', true);

затем перейдите:

http://www.website.com/wp-admin/network/setup.php

тогда:

Добавьте следующее в ваш файл .htaccess в /var/www/vhosts/website.com/, заменив другие правила WordPress:

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

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Вот и все.

Создать новый сайт с подкаталогом

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.