Comutarea instalației MultiSite de la HTTP la HTTPS
Am instalat MultiSite cu URL-ul setat ca http://example.com, dar acum vreau să forțez toate cererile să meargă prin HTTPS, așa că încerc să schimb URL-ul în https://example.com. Am parcurs baza de date și am actualizat toate valorile siteurl
și home
să aibă https, dar site-ul încă se încarcă prin HTTP, în loc să fie redirecționat la HTTPS.
Știu că aș putea configura niște reguli htaccess, dar această metodă e predispusă la erori. În instalațiile obișnuite WordPress va redirecționa automat toate cererile către URL-urile canonice definite în setările siteurl
și home
, așa că presupun că MultiSite face la fel.
Am întâmpinat aceeași problemă: în WordPress multisite, nu există nicio opțiune sau setare care să definească dacă un domeniu al site-ului este HTTP sau HTTPS. Chiar și după înlocuirea tuturor aparițiilor în baza de date, un vizitator al site-ului poate încă intra și naviga pe site în HTTP, fără a fi redirecționat către HTTPS.
Următoarea soluție simplă a funcționat pentru mine: am adăugat această regulă mod_rewrite
în fișierul meu .htaccess, chiar înainte de regulile specifice de rescriere ale WordPress.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Deoarece această regulă nu definește un domeniu specific, este perfectă pentru nevoile WordPress multisite.
Am găsit această regulă în următorul subiect: https://stackoverflow.com/questions/4398951/force-ssl-https-using-htaccess-and-mod-rewrite

Acest tip de soluție este excelent pentru un multisite cu protocol omogenizat. Odată ce dorești să ai un mix de site-uri SSL și non-SSL într-o rețea multisite, lucrurile devin complicate. Foarte complicate.

Într-adevăr, contextul meu a fost o rețea în care am trecut toate site-urile la SSL în același timp.

Toate plugin-urile pe care le-am văzut sunt pentru a seta anumite pagini să folosească HTTPS, nu întregul site. În instalările obișnuite de WordPress, metoda normală pentru a face întregul site să folosească HTTPS este să setezi valorile siteurl
și home
. Chiar dacă ar exista unele plugin-uri disponibile, există mai multe motive pentru care folosirea unui plugin este o idee proastă atunci când poți seta doar o valoare de configurare (securitate, performanță, etc.). De asemenea, sunt destul de sigur că nu contează dacă certificatul SSL este sau nu activat. WordPress nu va verifica acest lucru atunci când determină care este URL-ul canonic.

Adevărat și adevărat, doar mă întrebam dacă ai avut deja configurat sau nu (mulți oameni nu știu că ai nevoie de un certificat SSL dacă vrei cu adevărat să folosești SSL, de aceea întrebarea). Tocmai mi-am amintit că am avut un site al meu pe SSL acum ceva timp (nu doar anumite pagini, ci întregul site așa cum îl vrei tu). O să caut codul.

Hmm... nu am reușit să găsesc codul pe care l-am folosit atunci. Totuși, am găsit asta: http://prosauce.org/blog/2010/08/enable-complete-support-for-ssl-on-wordpress/

Am instalat Better WP Security dintr-un alt motiv, dar se pare că are o opțiune pentru a forța toate cererile de pagini (front-end și back-end) să meargă prin SSL.

Cea mai bună soluție ar fi cea care nu utilizează niciun plugin, după părerea mea. Astfel, fiecare cerere nu trebuie analizată de către plugin.

Am modificat regulile specifice unui gazdă. Dar acum redirecționează toate celelalte bloguri către acesta. Am schimbat "%{HTTP_HOST}" la un domeniu specific și am păstrat partea "%{REQUEST_URI}".
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://gezentiyiz.biz%{REQUEST_URI} [L,R=301]
În opinia mea, adăugarea de linii suplimentare RewriteRule pentru alte domenii ar putea rezolva problema, dar mă întreb dacă există o modalitate mai ușoară de a face acest lucru. Pentru că de fiecare dată când este creat un site de blog, trebuie să modificăm fișierul .htaccess???
Editare: Am rezolvat problema schimbând RewriteRule astfel:
RewriteRule http://gezentiyiz.biz%{REQUEST_URI} https://gezentiyiz.biz%{REQUEST_URI} [L,R=301]

"Am schimbat %{HTTP_HOST}
cu un domeniu specific" - Dar de ce? Sună mai degrabă ca o altă întrebare, decât ca un "răspuns"? Încercați să fiți selectiv și să redirecționați doar anumite site-uri către HTTPS?? "Am rezolvat problema schimbând RewriteRule astfel" - Doar că această regulă nu are sens și nu ar face nimic!? Pentru a face regula dependentă de numele gazdei, trebuie să verificați antetul HTTP Host
solicitat (variabila server Apache HTTP_HOST
) într-o condiție separată (directiva RewriteCond
).
