¿Cómo usar WordPress Multisite con diferentes nombres de dominio?
Quiero trabajar con WordPress multisite, pero quiero poder usar mis propios nombres. Por ejemplo, mi sitio principal se llama example.com
. Si quiero agregar un nuevo sitio a mi red multisite, se llamará newsite.example.com
. Quiero que sea newsite.com
sin example
. ¿Hay alguna manera de lograr esto?
He oído hablar sobre el mapeo de dominios con un plugin, pero no sé si esto es relevante para esta pregunta. Si es relevante, me gustaría saber exactamente qué es esto.

Parece que siempre hay un poco de confusión sobre este tema. Quizás WordPress podría hacer un mejor trabajo guiando a sus usuarios en este proceso. Aunque, supongo que Multisite no estaba destinado a ser usado para TLDs.
Así que, primero que nada, yo instalaría WordPress, configuraría multisite, y lo configuraría como una red de subdominios.
Aquí tienes una configuración de ejemplo para tu archivo wp-config.php
en el directorio base de tu instalación de WordPress:
/* Multisite */
define( 'WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
define( 'DOMAIN_CURRENT_SITE', 'www.dominio-principal.ejemplo' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
Luego, aquí está la configuración básica para tu archivo .htaccess
como configuración de subdominio, en el directorio base de tu instalación de WordPress:
# Inicio de WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# añade una barra diagonal al final de /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]
# Fin de WordPress
Ahora, para que los TLDs funcionen correctamente, he tenido que hacer algunas configuraciones adicionales al archivo wp-config.php
como estas:
define( 'COOKIE_DOMAIN', '' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );
Eso es todo con las configuraciones específicas de WordPress.
Personalmente, me gusta tener un Virtual Host de Apache para el dominio principal en la red y luego configurar ese virtual host con dominios alias. Cada dominio alias siendo uno de los sitios adicionales en tu red.
Sin embargo, termines ajustando tu configuración, necesitas que el DNS de cada dominio resuelva al mismo servidor web, y que cada dominio apunte al mismo directorio donde está instalado el dominio principal con WordPress. Cada dominio en tu red necesita apuntar al mismo servidor web con registros DNS y compartir la misma ruta de directorio para los archivos usados por WordPress.
Una vez que tengas todo configurado y funcionando correctamente como se discutió anteriormente. Inicia sesión en tu área de administración de WordPress y navega al área de administración de la red para añadir un nuevo sitio a tu red.
Cuando vayas a añadir un sitio, te obligará a añadir el sitio web como si fuera un subdominio bajo tu dominio principal. Simplemente acéptalo. Introduce algo temporal.
Una vez que el sitio haya sido añadido, búscalo en la lista de sitios de tu red. Haz clic en editar en ese sitio específico. Ahora, puedes cambiar completamente el 100% del nombre de dominio de ese sitio web. Es entonces cuando pondrías el nombre de dominio real para este sitio TLD.
Sé que es un poco astuto hacerlo de esa manera, pero funciona y no necesitas usar ningún plugin.

Gracias por esto, parece funcionar - y sí parecía necesitar la parte de la cookie. En mi caso, 1) registré un nuevo dominio, 2) apunté sus nameservers hacia mi host existente de WordPress Multisite, 3) en cPanel, agregué un dominio adicional (Add-On Domain), estableciendo el directorio raíz como el mismo public_html que el sitio principal (como dijiste; no probé la forma predeterminada con un nuevo directorio, así que no estoy seguro si eso funcionaría), y 4) cambié la URL del subsitio de http://oldsubdomain.primarysite.com a http://www.newdomain.com. Cruzo los dedos, hasta ahora no hay problemas de DNS.

Me encanta esta respuesta...pero tengo un problema. Tu sugerencia de cambiar el .htaccess, ya que WordPress también dio la misma modificación. Cuando hago este cambio, el sistema se cae. ¿Alguna idea de por qué pasaría esto?

WordPress ahora tiene un artículo de soporte sobre esto. Básicamente, los pasos recomendados son los delineados por David y Michael:
- Mapear el nombre de dominio en el DNS hacia tu servidor
- Asegurarse de que este dominio esté registrado en tu servidor con un host virtual apuntando al directorio de WordPress
- Generar e instalar un certificado SSL en tu servidor que incluya el dominio deseado (técnicamente esto es opcional, pero restringir a los usuarios a HTTP no es una buena idea, y ahora es regularmente penalizado con malas puntuaciones SEO)
- Actualizar la URL del sitio en tu blog de WordPress para que apunte al nuevo dominio
- Si persisten problemas con las cookies, definir
COOKIE_DOMAIN
enwp-config.php
La principal diferencia es que, en lugar de dejar el dominio de la cookie vacío (define( 'COOKIE_DOMAIN', '' );
), recomiendan llenarlo con el dominio al que fue la solicitud HTTP:
define('COOKIE_DOMAIN', $_SERVER['HTTP_HOST']);
Esto ayuda a evitar problemas con las cookies en instalaciones multisitio bajo diferentes nombres de dominio, especialmente para instalaciones en subdirectorios.

¿Cuál es la diferencia con cambiar ADMIN_COOKIE_PATH
, COOKIEPATH
y SITECOOKIEPATH
por una cadena vacía como hizo Michael? ¿Y usar $_SERVER['HTTP_HOST']
en lugar de una cadena vacía para COOKIE_DOMAIN
? ¿No es vulnerable a inyección de cabecera HTTP Host? Solo cambiar COOKIE_DOMAIN
funcionó para mí y la única diferencia que noté es que $_SERVER['HTTP_HOST']
establecerá el dominio de la cookie como .subdominio.dominio.tld
en lugar de subdominio.dominio.tld
(lo que solo sería útil si tenemos otro nivel de subdominio).

Fue posible sin usar un plugin desde hace algunas versiones (no recuerdo la versión concreta, pero la función lleva un tiempo disponible). Sin embargo, si empiezas desde cero, deberías instalar WordPress multisite en modo de subdominio.
Debes declarar una URL principal (probablemente kevin123.example
) como la URL principal de la red (multisite). Esto se almacena en wp-config.php
en la constante DOMAIN_CURRENT_SITE
y el sitio (anteriormente conocido como »blog«) que usa este dominio como URL de inicio debe tener el ID almacenado en BLOG_ID_CURRENT_SITE
. Pero esto es bastante estándar durante el proceso de instalación.
WordPress solo te permite especificar el subdominio cuando creas un nuevo sitio. Pero después de crear el sitio, puedes editarlo y añadir un valor completamente arbitrario para la URL del sitio. Lo describí hace algún tiempo en esta respuesta con algunas capturas de pantalla: ¿Son posibles los subdominios anidados con un multisite de subdominio?
También podrías necesitar establecer la constante COOKIE_DOMAN
a un valor vacío en tu wp-config.php
:
define( 'COOKIE_DOMAIN', '' );
