Cum să folosești WordPress Multisite cu nume de domenii diferite?
Vreau să lucrez cu WordPress multisite, dar vreau să pot folosi propriile mele nume. De exemplu, site-ul meu principal se numește example.com
. Dacă vreau să adaug un site nou în rețeaua mea multisite, acesta va fi numit newsite.example.com
. Vreau să fie newsite.com
fără example
. Există o modalitate de a realiza acest lucru?
Am auzit despre maparea domeniilor cu un plugin, dar nu știu dacă este relevant pentru această întrebare. Dacă este relevant, aș dori să știu exact ce înseamnă acest lucru.

Există întotdeauna o oarecare confuzie pe acest subiect. Poate că WordPress ar putea face o treabă mai bună în a-și ghida utilizatorii în acest proces. Deși, presupun că Multi-site nu a fost conceput să fie utilizat pentru domenii de nivel superior (TLD).
Deci, în primul rând, aș instala WordPress, configura multi-site și l-aș configura ca o rețea bazată pe subdomenii.
Iată o configurație exemplu pentru fișierul tău wp-config.php
din directorul de bază al instalării WordPress:
/* Multi-site */
define( 'WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
define( 'DOMAIN_CURRENT_SITE', 'www.primary-domain.example' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
Apoi, iată configurația de bază pentru fișierul tău .htaccess
ca o configurație cu subdomenii, în directorul de bază al instalării WordPress:
# BoF WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# adaugă o bară oblică la final pentru /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]
# EoF WordPress
Acum, pentru a face ca domeniile de nivel superior (TLD) să funcționeze corect, a trebuit să fac niște configurații suplimentare la fișierul wp-config.php
astfel:
define( 'COOKIE_DOMAIN', '' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );
Acestea sunt toate configurațiile specifice WordPress.
Personal, îmi place să am un singur Virtual Host Apache pentru domeniul principal din rețea și apoi să configurez acel virtual host cu domenii alias. Fiecare domeniu alias reprezentând unul dintre site-urile adiționale din rețeaua ta.
Indiferent cum ajustezi în final configurația, ai nevoie ca DNS-ul fiecărui domeniu să se rezolve către același server web, iar fiecare domeniu să fie direcționat către același director în care este instalat WordPress pentru domeniul principal. Fiecare domeniu din rețeaua ta trebuie să puncteze către același server web prin înregistrări DNS și să partajeze același cale a directorului pentru fișierele utilizate de WordPress.
Odată ce ai configurat totul corect conform celor discutate mai sus, conectează-te în zona de administrare WordPress și navighează în zona de administrare a rețelei pentru a adăuga un nou site în rețeaua ta.
Când vei adăuga un site, sistemul te va obliga să-l adaugi ca și cum ar fi un subdomeniu al domeniului tău principal. Continuă așa. Introdu ceva temporar.
Odată ce site-ul a fost adăugat, găsește-l în lista de site-uri din rețeaua ta. Apasă pe editare pentru acel site specific. Acum, poți schimba 100% numele de domeniu al acelui site. Atunci vei pune numele real de domeniu pentru acest site TLD.
Știu că este un pic de magie să faci astfel, dar funcționează și nu ai nevoie să folosești niciun plugin.

Mulțumesc pentru asta, pare să funcționeze - și chiar părea că are nevoie de partea cu cookie-ul. Pentru mine, am 1) înregistrat un nou domeniu, 2) am direcționat nameserver-ile către gazda mea existentă de WordPress Multisite, 3) în cPanel, am adăugat un domeniu Add-On, setând rădăcina documentelor la același public_html ca site-ul principal (cum ai spus; nu am încercat varianta implicită, cu un director nou, așa că nu sunt sigur dacă ar funcționa), și 4) am schimbat URL-ul subsite-ului de la http://oldsubdomain.primarysite.com la http://www.newdomain.com. Și până acum, fără probleme DNS.

Iubesc acest răspuns...dar am o problemă. Sugestia ta de a modifica .htaccess, la fel cum a sugerat și WordPress, când fac această modificare, sistemul se blochează. Ai vreo idee de ce s-ar întâmpla asta?

WordPress are acum un articol de suport pe această temă. În esență, pașii recomandați sunt cei prezentați de David și Michael:
- Mapează numele de domeniu în DNS către serverul tău
- Asigură-te că acest domeniu este înregistrat pe serverul tău cu un gazdă virtuală care indică spre directorul WordPress
- Generează și instalează un certificat SSL pe serverul tău care include domeniul dorit (din punct de vedere tehnic, acest pas este opțional, dar restricționarea utilizatorilor la HTTP nu este o idee bună și este acum penalizată în mod regulat cu scoruri SEO scăzute)
- Actualizează URL-ul site-ului în blogul tău WordPress pentru a indica spre noul domeniu
- Dacă problemele cu cookie-urile persistă, definește
COOKIE_DOMAIN
înwp-config.php
.
Diferența principală este că în loc să lași domeniul cookie-urilor gol (define( 'COOKIE_DOMAIN', '' );
), ei recomandă să completezi domeniul către care a fost trimisă cererea HTTP:
define('COOKIE_DOMAIN', $_SERVER['HTTP_HOST']);
Aceasta ajută la evitarea problemelor cu cookie-urile în instalările multisite sub diferite nume de domeniu, în special pentru instalările în subdirectoare.

Care este diferența dintre modificarea ADMIN_COOKIE_PATH
, COOKIEPATH
și SITECOOKIEPATH
prin șirul gol așa cum a făcut Michael? Și folosirea $_SERVER['HTTP_HOST']
în loc de șir gol pentru COOKIE_DOMAIN
? Nu este vulnerabil la injecție de antet HTTP Host? Doar modificarea COOKIE_DOMAIN
a funcționat pentru mine și singura diferență pe care am observat-o este că $_SERVER['HTTP_HOST']
va seta domeniul cookie-ului la .subdomain.domain.tld
în loc de subdomain.domain.tld
(ceea ce ar trebui să fie util doar dacă avem un alt nivel de subdomeniu).

Această funcționalitate a fost implementată fără a fi nevoie de un plugin acum câteva versiuni (nu-mi amintesc versiunea exactă, dar această caracteristică există de ceva timp). Cu toate acestea, dacă începeți de la zero, ar trebui să instalați WordPress multisite în modul subdomeniu.
Trebuie să declarați un URL principal (probabil kevin123.example
) ca URL principal pentru rețea (multisite). Acesta este stocat în wp-config.php
în constanta DOMAIN_CURRENT_SITE
, iar site-ul (cunoscut anterior ca »blog«) care folosește acest domeniu ca URL de bază trebuie să aibă ID-ul stocat în BLOG_ID_CURRENT_SITE
. Dar acestea sunt setări destul de standard în procesul de instalare obișnuit.
WordPress vă permite să specificați doar subdomeniul când creați un site nou. Dar după ce site-ul este creat, îl puteți edita și puteți adăuga o valoare complet arbitrară pentru URL-ul site-ului. Am descris acest lucru acum ceva timp în acest răspuns, cu câteva capturi de ecran: Sunt posibile subdomenii imbricate într-un multisite cu subdomenii?
De asemenea, s-ar putea să fie nevoie să setați constanta COOKIE_DOMAN
la o valoare goală în wp-config.php
:
define( 'COOKIE_DOMAIN', '' );
