Multisite: diferenças entre o modo subdomínio e subdiretório? Pode ser alternar após a instalação?

4

O recurso multisite do WordPress oferece dois modos de instalação diferentes: subdomínio e subdiretório instalam. Por padrão, os dois modos permitem gerenciar instâncias separadas do WordPress (sites) em uma instalação e dentro de um domínio primário. A diferença óbvia é o esquema de URL para todos os sites (no exemplo multisite.tld é o principal doman):

  • http://site1.multisite.tld para instalação de subdomínio e
  • http://multisite.tld/site1 para instalação do subdiretório.

Como é possível mapear qualquer domínio arbitrário para sites depois que eles foram criados nos dois modos, eu me pergunto Quais são as diferenças reais entre ambos? Além disso, existe uma maneira de alterar o modo após a instalação?

    
por David 23.10.2017 / 13:29

1 resposta

4

Da perspectiva do usuário, há duas diferenças notáveis. Primeiro de tudo, a GUI para criar novos sites. Ele mostra um campo de entrada para o primeiro segmento do caminho da URL (subdiretório) ou um campo de entrada para o subdomínio que você deseja usar para o novo site. (Configurar o URL para um valor completamente arbitrário só é possível ao editar um site já criado. Mas é possível em ambos os modos.)

O outro não é evidente à primeira vista e afeta apenas o modo de subdiretório: a estrutura de permalink dos principais sites terá um prefixo estático blog/ que não deve ser alterado. (Mesmo que haja soluções, altere ou remova o prefixo).

De uma perspectiva técnica, é uma configuração de sistema diferente que é definida por constantes de configuração, valores de configuração no banco de dados e também configuração do servidor da web. O que define o modo em primeiro lugar é a constante IS_SUBDOMAIN_INSTALL que pode ser definida como true (modo subdomínio) ou false (modo subdiretório). Mas esse não é o único lugar em que essas informações são armazenadas. Durante o processo de instalação, o WordPress armazena um valor inteiro como meta do site usando a chave subdomain_install . Pode ser lido (ou atualizado) via WP-CLI:

$ wp site option get subdomain_install
1

O modo Subdiretório resulta ainda mais em um elemento adicional na lista de slugs de sites proibidos: blog . Essa lista é armazenada no site meta illegal_names . Assim, no modo de subdiretório, ele se parece com isso por padrão:

$ wp site option get illegal_names
array (
      0 => 'www',
      1 => 'web',
      2 => 'root',
      3 => 'admin',
      4 => 'main',
      5 => 'invite',
      6 => 'administrator',
      7 => 'files',
      8 => 'blog',
)

Configuração de reconfiguração do Apache

Como o servidor da Web não é responsável pelos recursos internos do WordPress, sua configuração é toda sobre o roteamento da URL solicitada para o script ou arquivo de recurso correto. Principalmente, trata-se da questão de encaminhar URLs de solicitação como /site-slug/wp-[admin|content|includes] e /site-slug/wp-*.php para os diretórios apropriados ( /wp-*/ ) ou scripts.

Assim, o conjunto sugerido padrão de regras de regravação para o modo de subdiretório é o seguinte:

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]

Considerando que o conjunto para o modo subdomínio é sugerido como este:

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]

O tipo de conjunto de regras usado depende muito do esquema de domínio desejado que você está planejando para o seu multisite. O mais flexível, claro, é o primeiro (subdiretório) , já que o segmento do caminho da URL ("subdiretório") é totalmente opcional .

Sunrising (roteamento WordPress) e is_subdomain_install() função API

Para saber qual modo está configurado, o WordPress fornece a função is_subdomain_install() que retorna true if:

  • a constante SUBDOMAIN_INSTALL é definida e definida como true ou
  • a constante SUBDOMAIN_INSTALL não está definida, mas VHOST está definida e definida como 'yes'

Ele retorna false se SUBDOMAIN_INSTALL estiver definido e definido como false . E ele retorna qualquer outra coisa se SUBDOMAIN_INSTALL for definido, mas não do tipo booleano. O valor meta do site mencionado acima é usado apenas durante o processo de configuração mutliste. O núcleo do WordPress depende apenas do valor dessa constante em qualquer outro lugar.

No entanto, o valor de is_subdomain_install() afeta o roteamento da URL solicitada para um site específico na rede apenas se as constantes DOMAIN_CURRENT_SITE e PATH_CURRENT_SITE não estiverem definidas. (Veja ms_load_current_site_and_network() ). Isso significa que é possível usar qualquer domínio como URL do site nos dois modos (mapeamento de domínio).

Modos de comutação após a configuração

Alternando subdomínio de formulário para o modo de subdiretório

  • Altere o valor da constante IS_SUBDOMAIN_INSTALL de true para false
  • Defina o valor do site meta subdomain_install para 0 :

    $wp site option set subdomain_install 0

  • Adicione o prefixo /blog/ à estrutura de permalink do site principal. Será corrigido depois que a configuração foi atualizada.
  • Adicione blog à lista de slugs de sites proibidos. Como esta lista é um valor serializado, isso deve ser feito através de um pequeno script PHP que pode ser executado via WP-CLI:

$ wp eval-file patch-forbidden-slugs.php

// patch-forbidden-slugs.php
<?php
$illegalNames = get_metadata( 'site', SITE_ID_CURRENT_SITE, 'illegal_names', true );
$blogSlug = 'blog';
if ( in_array( $blogSlug, $illegalNames ) ) {
    exit( 'Noting to do' . PHP_EOL );
}
$illegalNames[] = $blogSlug;
update_metadata( 'site', SITE_ID_CURRENT_SITE, 'illegal_names', $illegalNames );
exit( 'Done' . PHP_EOL );

Alternando o subdiretório de formulário para o modo de subdomínio

  • Altere o valor da constante IS_SUBDOMAIN_INSTALL de false para true
  • Defina o valor do site meta subdomain_install para 1 :

    $ wp site option set subdomain_install 1

  • Remova o prefixo /blog/ da estrutura de permalink do site principal

  • Remova o blog slug da lista de nomes proibidos (adapte o script acima de acordo)

Conclusão

Minhas observações consideram apenas uma instalação limpa do WordPress e uma instalação imediata da rede. Também a última versão do WordPress 4.8 é considerada. Pode ser possível que existam implicações ao fazer uma instalação multisite em um sistema existente que use plugins ou qualquer versão mais antiga do WordPress.

No entanto, minha configuração preferida é o modo de subdomínio com o conjunto de regras .htaccess para subdiretórios, pois oferece mais flexibilidade na caixa. Ele até funciona com configurações controladas por compositores modernos, como o WPStarter (com uma pequena adaptação das regras do .htaccess).

    
por David 23.10.2017 / 13:29