Movendo um WP Multisite para um subdiretório

20

Em primeiro lugar, li várias postagens sobre esse processo. No entanto, por várias razões, o processo continua difícil de implementar ou solucionar problemas por falta de exemplos abstratos, ou talvez abstratos demais. E há algumas postagens "não posso fazer", quase sempre seguidas de "com 3.5, agora você pode" advertências, para saber se alguém pode permanecer ambíguo, embora sem dúvida não seja trivial.

Resumo:

Como mover um wordpress multisite (WPMS) de root.com para root / blogs?

Neste exemplo, estamos movendo um WPMS de "root.com" para "root.com/blogs"

Entendo que preciso atualizar os caminhos no banco de dados e no wp-config.php adequadamente. Parece que também posso precisar atualizar .htaccess? Também estou ciente do problema de serialização com atualizações de consulta de pesquisa / substituição e mysql.

Eu tenho um WPMS que atualizei para 3.5. Encontrei as tabelas a seguir com informações de domínio e caminho

Configuração de trabalho existente antes de passar para o subdiretório

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. O blog_id corresponde às tabelas de opções wp _ # _ que contêm:

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. No meu wp-config.php , tenho as seguintes linhas específicas do 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. Por fim, no meu .htaccess , tenho:

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]

Atualizações necessárias para mover o site

Parece-me que, para mover meu site para os / blogs, eu deveria:

1. Atualize wp_blogs para

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. Atualize wp_site para

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 _ # _ opções

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

nota: não sei como esta etapa é atualizada adequadamente

5. htaccess

Encontrei vagas instruções de "atualização .htaccess adequadamente", mas não específicas. Atualizar RewriteBase? Quais linhas em .htaccess atualizo quando movo root.com para root.com/blogs?

Faltam no processo acima os caminhos encontrados nas postagens. Meus defensores devem usar a ferramenta de pesquisa e substituição para isso, depois de fazer essas atualizações mais fundamentais; ou eu estou errado?

A atualização da bungeshea sugere que, sim, aponte o RewriteBase para o subdiretório "blogs", ou seja,

RewriteBase /Blogs

Por fim, se você não conhece o http://interconnectit.com/products/search-and-replace-for-wordpress-databases/, deve. É excelente.

Screenack
fonte
3
Ótima pergunta, ótimo processo +1
kaiser
11
Sou apenas eu? Eu acho que as consultas no processo não estão corretas update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); deveriam ser #update wp_blogs set path=concat('/blogs',path);
MR

Respostas:

7

Eu sei que é velho, mas eu consertei! instalei o WP MU em uma subpasta. 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);

e no seu banco de dados, modifique isto:

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
fonte
isso foi incrivelmente útil. Eu tinha uma instalação de subdomínio e um dump e zip do banco de dados do site. Eu precisava restaurá-lo em um novo servidor e tive que atualizar manualmente o site. As atualizações do banco de dados foram as mais importantes que eu precisava fazer. Obrigado!
Jacob Raccuia
2

Parece-me como se tivesse resolvido o seu próprio problema - basta seguir os seus passos 1-4, e para a etapa 5 atualização do RewriteBaseno .htaccess. Para atualizar os caminhos nas postagens, gosto de usar a ferramenta de busca e substituição esterilizada da Interconnect IT .

shea
fonte
Obrigado, Bungshea. Como indiquei na minha postagem, atualize o RewriteBase para o que exatamente, conforme o exemplo acima? Seria: RewriteBase / blog?
Screenack
Sim:RewriteBase /blog
shea
Bungshea; feito, mas ainda não está funcionando. Ainda está recebendo "Erro ao estabelecer conexão com o banco de dados" após todas as opções acima. Pior, não há erros lançados no meu log de erros do apache.
Screenack
@ Screenack, quais são as especificidades de "Erro ao estabelecer conexão com o banco de dados"? Dica: visitwp-admin
shea
1

Ok, aqui está o que eu fiz e isso funcionou. Nenhuma subpasta. O site foi configurado anteriormente para subdomínio.

BACKUP PRIMEIRO !!!

wp-config.php (substitua este bloco pelo bloco do seu arquivo)

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]

agora no banco de dados SQL:

1) para cada wp_ (site #) _ tablesuffix, vá para a tabela de opções e altere siteurl e home para http://www.sitename.com/blogname

2) wp_blogs para cada blog_id alteram o domínio de blogname.domain.compara domain.come o caminho para/blogname/

3) não há necessidade de alterar wp_options siteurl & home ou quaisquer células em wp_site ou wp_sitemeta se a instalação estiver no mesmo local.

Depois de concluir, vá para (no painel de administração do superusuário)> permalinks e clique em Salvar.

Voila!

hot_barbara
fonte
0

Esta é a minha primeira resposta, por isso seja atencioso! :)

Eu não tinha um blog que já estivesse em subdomínios para ser convertido. Mas eu tive que lutar porque era um blog antigo e eles não me deixaram criar um blog de subdiretório e eu temia que o WP fizesse alterações no meu banco de dados quando eles me deram os códigos para inserir.

Isso foi o que funcionou para mim em abril de 2018, pessoal ... usei o wp-config do hot_barbara e usei o .htaccess também deles.

Portanto, por favor, não vá para uma subpasta - eu não!

NO ENTANTO, no SQL DB, foi o que aconteceu no meu caso - já era tudo assim, então não fiz alterações:

  1. domínio wp_site: caminho xyzabc.com: /

domínio wp_blogs: caminho xyzabc.com: /

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

Você - como eu entendo - estaria usando uma barra final se a tivesse nas suas configurações.

Ebe
fonte
0

Reescreva o seu wp-config.phpcom este código

define('SUBDOMAIN_INSTALL', false);

ao invés de define('SUBDOMAIN_INSTALL', true);

então vá para:

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

então:

Adicione o seguinte ao seu arquivo .htaccess em /var/www/vhosts/website.com/, substituindo outras regras do 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]

É isso aí.

Criar um novo site com subdiretório

Amran
fonte