Come utilizzare WordPress Multisite con nomi di dominio diversi?
Voglio lavorare con WordPress multisite, ma voglio poter utilizzare i miei propri nomi. Per esempio, il mio sito principale si chiama example.com
. Se voglio aggiungere un nuovo sito alla mia rete multisite, questo verrebbe chiamato newsite.example.com
. Vorrei invece che fosse newsite.com
senza example
. C'è un modo per ottenere questo risultato?
Ho sentito parlare del domain mapping tramite plugin, ma non so se questo sia rilevante per questa domanda. Se lo è, mi piacerebbe sapere esattamente di cosa si tratta.

Sembra che ci sia sempre un po' di confusione su questo argomento. Forse WordPress potrebbe fare un lavoro migliore nel guidare i suoi utenti in questo processo. Anche se, suppongo che il Multisito non fosse pensato per essere utilizzato con TLD.
Quindi, prima di tutto, installerei WordPress, configurerei il multisito e lo imposterei come una configurazione di rete con sottodomini.
Ecco una configurazione di esempio per il tuo file wp-config.php
nella directory principale della tua installazione WordPress:
/* Multisite */
define( 'WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
define( 'DOMAIN_CURRENT_SITE', 'www.dominio-principale.esempio' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
Poi, ecco la configurazione base per il tuo file .htaccess
come configurazione con sottodomini, nella directory principale della tua installazione WordPress:
# Inizio WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# aggiungi una barra finale a /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]
# Fine WordPress
Ora, per far funzionare correttamente i TLD, ho dovuto apportare alcune configurazioni aggiuntive al file wp-config.php
in questo modo:
define( 'COOKIE_DOMAIN', '' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );
Questo è tutto per le configurazioni specifiche di WordPress.
Personalmente, mi piace avere un Virtual Host Apache per il dominio principale nella rete e poi configurare quel virtual host con domini alias. Ogni dominio alias sarà uno dei siti aggiuntivi nella tua rete.
Indipendentemente da come deciderai di modificare il tuo setup, hai bisogno che il DNS di ogni dominio si risolva nello stesso web server e che ogni dominio punti alla stessa directory in cui è installato WordPress con il dominio principale. Ogni dominio nella tua rete deve puntare allo stesso web server con i record DNS e condividere lo stesso percorso della directory per i file utilizzati da WordPress.
Una volta che hai configurato e impostato tutto correttamente come discusso sopra. Accedi alla tua area di amministrazione WordPress e naviga nell'area di amministrazione della rete per aggiungere un nuovo sito nella tua rete.
Quando vai ad aggiungere un sito, ti obbligherà ad aggiungere il sito come se fosse un sottodominio del tuo dominio principale. Va bene così. Inserisci qualcosa di temporaneo.
Una volta che il sito è stato aggiunto, trovalo nell'elenco dei siti nella tua rete. Clicca su modifica per quel sito specifico. Ora puoi cambiare completamente al 100% il nome del dominio di quel sito web. È allora che inserirai il nome di dominio effettivo per questo sito TLD.
So che è un po' un trucchetto farlo in questo modo, ma funziona e non hai bisogno di usare alcun plugin.

Grazie per questo, sembra funzionare - e sembrava davvero necessaria la parte relativa ai cookie. Nel mio caso ho: 1) registrato un nuovo dominio, 2) puntato i suoi nameserver verso il mio host WordPress Multisite esistente, 3) in cPanel, ho aggiunto un dominio Add-On, impostando la root dei documenti come lo stesso public_html del sito principale (come hai suggerito; non ho provato il modo predefinito con una nuova directory, quindi non so se avrebbe funzionato), e 4) ho cambiato l'URL del sottosito da http://oldsubdomain.primarysite.com a http://www.newdomain.com. Incrociamo le dita, finora nessun problema con il DNS.

Adoro questa risposta...ma ho un problema. Il tuo suggerimento per modificare il file .htaccess coincide con quello fornito da WordPress. Quando apporto questa modifica, il sistema va in crash. Hai idea del perché succeda?

WordPress ora ha un articolo di supporto su questo argomento. In sostanza, i passaggi consigliati sono quelli delineati da David e Michael:
- Mappare il nome del dominio nel DNS al tuo server
- Assicurarsi che questo dominio sia registrato sul tuo server con un host virtuale che punti alla directory di WordPress
- Generare e installare un certificato SSL sul tuo server che includa il dominio desiderato (tecnicamente questo è opzionale, ma limitare gli utenti a HTTP non è una buona idea e ora viene regolarmente penalizzato con punteggi SEO scarsi)
- Aggiornare l'URL del sito nel tuo blog WordPress per puntare al nuovo dominio
- Se persistono problemi con i cookie, definire
COOKIE_DOMAIN
inwp-config.php
La differenza principale è che invece di lasciare vuoto il dominio del cookie (define( 'COOKIE_DOMAIN', '' );
), consigliano di inserire il dominio a cui è stata inviata la richiesta HTTP:
define('COOKIE_DOMAIN', $_SERVER['HTTP_HOST']);
Questo aiuta a evitare problemi con i cookie nelle installazioni multisito sotto diversi nomi di dominio, specialmente per le installazioni in sottodirectory.

Qual è la differenza tra cambiare ADMIN_COOKIE_PATH
, COOKIEPATH
e SITECOOKIEPATH
con una stringa vuota come fatto da Michael? E usare $_SERVER['HTTP_HOST']
invece di una stringa vuota per COOKIE_DOMAIN
? Non è vulnerabile all'injection dell'header HTTP Host? Solo cambiare COOKIE_DOMAIN
ha funzionato per me e l'unica differenza che ho notato è che $_SERVER['HTTP_HOST']
imposterà il dominio del cookie a .subdomain.domain.tld
invece di subdomain.domain.tld
(il che dovrebbe essere utile solo se abbiamo un altro livello di sottodominio).

È stato reso possibile senza utilizzare un plugin già da alcune versioni fa (non ricordo la versione esatta ma la funzionalità è presente da un po' di tempo). Tuttavia, se parti da zero, dovresti installare WordPress multisite in modalità sottodominio.
Devi dichiarare un URL principale (probabilmente kevin123.example
) come URL principale della rete (multisite). Questo viene memorizzato in wp-config.php
nella costante DOMAIN_CURRENT_SITE
e il sito (precedentemente chiamato »blog«) che utilizza questo dominio come URL home deve avere l'ID memorizzato in BLOG_ID_CURRENT_SITE
. Ma questa è praticamente la configurazione predefinita durante il processo di installazione standard.
WordPress ti consente di specificare solo il sottodominio quando crei un nuovo sito. Ma dopo che il sito è stato creato, puoi modificarlo e aggiungere un valore completamente arbitrario per l'URL del sito. L'ho descritto qualche tempo fa in questa risposta con alcuni screenshot: I sottodomini nidificati sono possibili con un multisite a sottodominio?
Potresti anche aver bisogno di impostare la costante COOKIE_DOMAN
su un valore vuoto nel tuo wp-config.php
:
define( 'COOKIE_DOMAIN', '' );
