Multisite: ¿diferencias entre subdominio y modo subdirectorio? ¿Se puede cambiar después de la instalación?

4

La función multisitio de WordPress ofrece dos modos de instalación diferentes: subdominio y subdirectorio . Por defecto, ambos modos permiten administrar instancias (sitios) de WordPress separadas dentro de una instalación y dentro de un dominio primario. La diferencia obvia es el esquema de URL para todos los sitios (en el ejemplo, multisite.tld es el doman principal):

  • http://site1.multisite.tld para la instalación de subdominios y
  • http://multisite.tld/site1 para la instalación del subdirectorio.

Dado que es posible asignar cualquier dominio arbitrario a los sitios después de que se crearon en ambos modos, me pregunto ¿Cuáles son las diferencias reales entre ambos? Además, ¿hay alguna manera de cambiar el modo después de la instalación?

    
pregunta David 23.10.2017 - 13:29

1 respuesta

4

Desde la perspectiva del usuario, hay dos diferencias notables. Primero que nada la GUI para crear nuevos sitios. O bien muestra un campo de entrada para el primer segmento de la ruta de la URL (subdirectorio) o un campo de entrada para el subdominio que desea usar para el nuevo sitio. (La configuración de la URL en un valor completamente arbitrario solo es posible cuando se edita un sitio ya creado. Pero es posible en ambos modos).

El otro no es evidente a primera vista y solo afecta al modo subdirectorio: la estructura de enlace permanente de los sitios principales tendrá un prefijo estático blog/ que no debe modificarse. (Aunque puede haber soluciones, cambie o elimine el prefijo).

Desde una perspectiva técnica, es una configuración de sistema diferente que se define por las constantes de configuración, los valores de configuración en la base de datos y también la configuración del servidor web. Lo que define el modo en primer lugar es la constante IS_SUBDOMAIN_INSTALL que se puede establecer en true (modo subdominio) o false (modo subdirectorio). Pero ese no es el único lugar donde se almacena esta información. Durante el proceso de instalación, WordPress almacena un valor entero como meta del sitio usando la clave subdomain_install . Se puede leer (o actualizar) a través de WP-CLI:

$ wp site option get subdomain_install
1

El modo Subdirectorio da como resultado un elemento adicional en la lista de barras de sitios prohibidos: blog . Estas listas se almacenan en el sitio meta illegal_names . Por lo tanto, en modo subdirectorio se ve así por defecto:

$ 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',
)

Configuración de reescritura de Apache

Como el servidor web no es responsable de los aspectos internos de WordPress, su configuración se basa en enrutar la URL solicitada al script o archivo de activos correcto. Principalmente se trata de la cuestión de si enrutar las URL de solicitud como /site-slug/wp-[admin|content|includes] y /site-slug/wp-*.php a los directorios apropiados ( /wp-*/ ) o scripts.

Por lo tanto, el conjunto de reglas de reescritura sugerido por defecto para modo subdirectorio es este:

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]

Mientras que el conjunto para modo de subdominio se sugiere como esto:

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]

El tipo de conjunto de reglas que se usa en gran medida depende del esquema de dominio deseado que esté planeando para su multisitio. El más flexible, por supuesto, es el primero (subdirectorio) , ya que el segmento de la ruta URL («subdirectorio») es totalmente opcional .

Sunrising (enrutamiento de WordPress) y función% API de% co_de

Para saber qué modo está configurado, WordPress proporciona la función is_subdomain_install() devuelve is_subdomain_install() if:

  • la constante true se define y se establece en SUBDOMAIN_INSTALL o
  • la constante true no está definida, pero SUBDOMAIN_INSTALL está definida y establecida en VHOST

Devuelve 'yes' si se define false y se establece en SUBDOMAIN_INSTALL . Y devuelve cualquier otra cosa si false está definido pero no es de tipo booleano. El valor meta del sitio mencionado anteriormente solo se usa durante el proceso de configuración de mutliste. El núcleo de WordPress se basa únicamente en el valor de esta constante en cualquier otro lugar.

Sin embargo, el valor de SUBDOMAIN_INSTALL afecta el enrutamiento de la URL solicitada a un sitio específico en la red solo si las constantes is_subdomain_install() y DOMAIN_CURRENT_SITE no están definidas. (Ver PATH_CURRENT_SITE ). Eso significa que es posible usar cualquier dominio como URL del sitio en ambos modos (mapeo de dominio).

Cambio de modo después de la configuración

Cambio del subdominio del formulario al modo subdirectorio

  • Cambie el valor de la constante ms_load_current_site_and_network() de IS_SUBDOMAIN_INSTALL a true
  • Establezca el valor del sitio meta false en subdomain_install :

    0

  • Agregue el prefijo $wp site option set subdomain_install 0 a la estructura de enlace permanente del sitio principal. Se solucionará una vez que se actualice la configuración.
  • Agregue /blog/ a la lista de slugs de sitios prohibidos. Como esta lista es un valor serializado, esto debe hacerse a través de un pequeño script PHP que puede ejecutarse a través de WP-CLI:

blog

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

Cambiar el subdirectorio del formulario al modo de subdominio

  • Cambie el valor de la constante $ wp eval-file patch-forbidden-slugs.php de IS_SUBDOMAIN_INSTALL a false
  • Establezca el valor del sitio meta true en subdomain_install :

    1

  • Elimine el prefijo $ wp site option set subdomain_install 1 de la estructura de enlace permanente del sitio principal

  • Elimine el slug /blog/ de la lista de nombres prohibidos (adapte el script de arriba según corresponda)

Conclusión

Mis comentarios solo consideran una instalación de WordPress limpia y una instalación de red inmediata. También se considera la última versión de WordPress 4.8. Es posible que haya implicaciones al realizar una instalación en varios sitios en un sistema existente que use complementos o cualquier versión anterior de WordPress.

Sin embargo, mi configuración preferida es el modo de subdominio con la regla .htaccess establecida para subdirectorios, ya que ofrece la mayor flexibilidad fuera de la caja. Incluso funciona con configuraciones modernas controladas por el compositor como WPStarter (con una ligera adaptación de las reglas .htaccess).

    
respondido por el David 23.10.2017 - 13:29

Lea otras preguntas en las etiquetas