Переміщення WP Multisite до підкаталогу


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]

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

Мені здається, що для того, щоб перенести свій сайт в / блоги, я б:

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 на підкаталог "blogs", тобто

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)

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

2

Він дивиться на мене , як якщо б ви вирішити свої власні проблеми - просто слідувати вашим кроків 1-4, і крок 5 поновлення RewriteBaseв .htaccess. Для оновлення шляхів у публікаціях мені подобається використовувати стерилізований ІТ- інструмент Interconnect для пошуку та заміни .


Спасибі, банджа. Як я вказую у своєму дописі, оновіть RewriteBase саме тим, як зазначено у наведеному вище прикладі? Це було б: RewriteBase / blog?
Screenack

Так:RewriteBase /blog
shea

Буншхея; зроблено, але все ще не працює. Отримано "Помилка встановлення підключення до бази даних" після всього вищесказаного. Гірше, що в журнал помилок apache помилок немає.
Screenack

@Screenack в чому специфіка "Помилка встановлення підключення до бази даних"? Підказка: візитwp-admin
ши

1

Добре ось що я зробив, і це спрацювало. Немає підпапки. Раніше сайт був налаштований на субдомен.

НАЗАД ПЕРШИЙ !!!

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 БД це те, що трапилося в моєму випадку - все було вже таким чином, тому я не вносив жодних змін:

  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.