Przeniesienie WP Multisite do podkatalogu

20

Po pierwsze, przeczytałem wiele postów na temat tego procesu. Jednak z różnych powodów proces ten nadal jest trudny do wdrożenia lub rozwiązania problemów z powodu braku nawet abstrakcyjnych przykładów, a może zbyt abstrakcyjnych. Jest też kilka postów „nie da się zrobić”, po których prawie zawsze następuje „3.5”, teraz możesz „zastrzec”, więc czy ktoś może pozostać niejednoznaczny, choć niewątpliwie niebanalny.

Streszczenie:

Jak przenieść Wordpress Multisite (WPMS) z root.com do root / blogów?

W tym przykładzie przenosimy WPMS z „root.com” na „root.com/blogs”

Rozumiem, że muszę odpowiednio zaktualizować ścieżki w bazie danych i wp-config.php. Wygląda na to, że mogę także zaktualizować plik .htaccess? Mam również świadomość problemu serializacji z aktualizacjami wyszukiwania / zamiany i zapytań mysql.

Mam WPMS, który zaktualizowałem do wersji 3.5. Znalazłem następujące tabele z informacjami o domenie i ścieżce

Istniejąca konfiguracja robocza przed przejściem do podkatalogu

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 odpowiada tabelom opcji wp _ # _, które zawierają:

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. W moim wp-config.php mam następujące wiersze specyficzne dla 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. Wreszcie, w moim .htaccess mam:

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]

Aktualizacje wymagane do przeniesienia witryny

Wydaje mi się, że w celu przeniesienia mojej witryny do / blogów:

1. Zaktualizuj wp_blogs do

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. Zaktualizuj wp_site do

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 _ # _ opcje

+-------------+--------------------------------+
| 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 );

Uwaga: Nie jestem pewien, jak ten krok został odpowiednio zaktualizowany

5. .htaccess

Znalazłem niejasne instrukcje „odpowiednio aktualizuj .htaccess”, ale nie były to szczegóły. Zaktualizować RewriteBase? Które linie w .htaccess do zaktualizować po przeniesieniu root.com na root.com/blogs?

W powyższym procesie brakuje ścieżek znalezionych w postach. Moi drutherzy powinni użyć do tego narzędzia wyszukiwania i zamiany po tym, jak dokonałem tych bardziej fundamentalnych aktualizacji; czy się mylę?

Aktualizacja bungeshea sugeruje, że tak, wskazuję RewriteBase na podkatalog „blogów”, tj.

RewriteBase /Blogs

Wreszcie, jeśli nie wiesz o http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ , powinieneś. To jest świetne.

Screenack
źródło
3
Świetne pytanie, świetny proces +1
kaiser
1
Czy to tylko ja? Myślę, że zapytania w tym procesie nie są poprawne, update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); powinny raczej brzmiećupdate wp_blogs set path=concat('/blogs',path);
MR

Odpowiedzi:

7

Wiem, że jest stary, ale go naprawiłem! Zainstalowałem WP MU w podfolderze. 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);

i w swojej bazie danych zmodyfikuj to:

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)
nicmare
źródło
było to niezwykle pomocne. Miałem instalację subdomeny oraz zrzut bazy danych i zip strony. Musiałem przywrócić go na nowym serwerze i musiałem ręcznie zaktualizować witrynę. Aktualizacje bazy danych były najbardziej niezbędne, jakie musiałem wykonać. Dziękuję Ci!
Jacob Raccuia
2

Wydaje mi się, jakbyś rozwiązał swój problem - wystarczy śledzić swoje kroki 1-4, a na krok 5 Aktualizacja RewriteBasew .htaccess. Do aktualizacji ścieżek w postach lubię używać sterylizowanego narzędzia wyszukiwania i wymiany Interconnect IT .

shea
źródło
Dzięki, bungshea. Jak wskazuję w moim poście, zaktualizuj RewriteBase na dokładnie tak, jak w powyższym przykładzie? Czy to byłoby: RewriteBase / blog?
Screenack
Tak:RewriteBase /blog
shea
Bungshea; zrobione, ale nadal nie działa. Nadal pojawia się komunikat „Błąd nawiązywania połączenia z bazą danych” pomimo wszystkich powyższych. Co gorsza, w moim dzienniku błędów Apache nie są zgłaszane żadne błędy.
Screenack
@ Screencack Jakie są szczegóły „Błąd nawiązywania połączenia z bazą danych”? Wskazówka: wizytawp-admin
shea
1

Ok, oto co zrobiłem i to zadziałało. Brak podfolderu. Witryna została wcześniej skonfigurowana do poddomeny.

BACKUP FIRST !!!

wp-config.php (zamień ten blok na blok w pliku)

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]

teraz w SQL DB:

1) dla każdego wp_ (site #) _ tableuffix przejdź do tabeli opcji i zmień siteurl i home na http://www.sitename.com/blogname

2) wp_blogs dla każdego identyfikatora blogu zmień domenę z blogname.domain.comna domain.comi ścieżkę do/blogname/

3) nie trzeba zmieniać wp_options siteurl & home ani żadnych komórek w wp_site lub wp_sitemeta, jeśli instalacja jest w tej samej lokalizacji.

Po zakończeniu należy przejść do (w panelu administracyjnym administratora) ustawień> łącza bezpośrednie i kliknąć przycisk Zapisz.

Voila!

hot_barbara
źródło
0

To jest moja pierwsza odpowiedź, więc proszę, bądźcie uważni! :)

NIE Miałem bloga, który już był w poddomenach do konwersji. Ale musiałem walczyć, ponieważ był to stary blog i nie pozwolą mi zrobić bloga z podkatalogiem i obawiałem się, że WP wprowadziło zmiany w moim DB, zanim dali mi kody do wprowadzenia.

To działało dla mnie w kwietniu 2018 chłopaki ... Użyłem wp-config z hot_barbara i również z nich .htaccess.

Dlatego proszę nie wybieraj podfolderu - nie zrobiłem tego!

JEDNAK w SQL DB tak się stało w moim przypadku - wszystko było już w ten sposób, więc nie wprowadziłem żadnych zmian:

  1. domena wp_site: ścieżka xyzabc.com: /

domena wp_blogs: ścieżka xyzabc.com: /

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

Jak rozumiem, użyłbyś końcowego ukośnika, gdybyś miał go w swoich ustawieniach.

Ebe
źródło
0

Przepisz swój wp-config.phpkod za pomocą tego kodu

define('SUBDOMAIN_INSTALL', false);

zamiast define('SUBDOMAIN_INSTALL', true);

następnie idź do:

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

następnie:

Dodaj następujące elementy do pliku .htaccess w /var/www/vhosts/website.com/, zastępując inne reguły 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]

Otóż ​​to.

Utwórz nową witrynę z podkatalogiem

Amran
źródło