Cum să forțezi resursele statice cu surse HTTP să se încarce prin HTTPS?

29 iul. 2013, 10:47:48
Vizualizări: 23.9K
Voturi: 4

(Folosesc plugin-ul Wordpress HTTPS pentru a forța modul Admin să ruleze sub HTTPS.
Funcționează bine pentru Panoul de Administrare.)

Dar totuși, odată ce sunt în modul HTTPS, toate paginile din frontend sunt stricate deoarece unele fișiere Asset Files vin ca HTTP normal (fără 'S') care apoi sunt blocate la încărcarea în pagină.

Acest lucru face ca pagina să arate dezordonată.

Deci, pentru a fi mai clar:

  • Când accesez site-ul în modul HTTPS / SSL .. unele fișiere de resurse, precum:
    • http://www.my-another-site.com/something.js
    • http://www.my-another-site.com/something.css
    • http://www.my-another-site.com/something.jpg
    • ... etc

.. sunt STRICATE. (Pentru că sunt în modul https și aceste fișiere de mai sus vin ca http)

Deci cum pot face WordPress să FORȚEZE ÎNCĂRCAREA acestor fișiere?
(NU MĂ INTERESEAZĂ DACĂ ESTE SECURIZAT SAU NU. Vreau doar ca site-ul sub https://... să se afișeze corect.)

1
Comentarii

Instalează SSL Insecure Content Fixer și rulează testul "test is_ssl()" din rândul meniului pluginului. Acest test va verifica dacă ești în spatele unui proxy invers, care împiedică WordPress să detecteze SSL. De asemenea, va oferi o soluție în funcție de ce găsește.

webaware webaware
30 iul. 2013 01:41:34
Toate răspunsurile la întrebare 5
0

Dacă resursele sunt încărcate corect, ele folosesc exact URL-ul cu care au fost înregistrate. Dacă protocolul din URL este hardcodat, aceasta poate cauza probleme de nepotrivire pe care le observați.

Pentru o suportare corectă a protocolului, URL-urile încărcate trebuie să fie fie:

  • create cu funcții API din WordPress care sunt conștiente de protocol (majoritatea, dacă nu toate funcțiile care produc URL-uri sunt)
  • folosind formatul relativ la protocol, precum //exemplu.com/stylesheet.css

Dacă link-urile provin din codul unei terțe părți, va trebui să dezînregistrați și să reînregistrați resursa în consecință sau (în cel mai rău caz, dacă coada nu este utilizată) să rescrieți codul / să solicitați dezvoltatorului original să o facă.

29 iul. 2013 16:59:10
3

Dacă utilizați AWS Load Balancers cu SSL Termination, iată ce am făcut eu:

Presupunând că aveți AWS ELB configurat să facă terminare SSL și să direcționeze traficul către grupul țintă Wordpress:

În wp-config.php:

define('WP_HOME','https://SITELE_TAU_WORDPRESS');
define('WP_SITEURL','https://SITELE_TAU_WORDPRESS');

// Actualizare 8-Aprilie-2018: Am mutat redirecționarea https din configurația virtual server Apache în wp-config.php folosind acest fragment de cod.
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
   $_SERVER['HTTPS']='on';

Sursa: https://blog.lawrencemcdaniel.com/wordpress-aws-elb-ssl/

20 iul. 2022 20:16:17
Comentarii

Soluție inteligentă pentru echilibrare de sarcină... funcționează pentru toate tipurile de resurse statice, cum ar fi imagini, scripturi și hyperlink-uri interne?

Jesse Nickles Jesse Nickles
19 aug. 2022 13:33:05

@JesseNickles da

cilantro cilantro
10 nov. 2022 19:10:58

Ce face exact acea condiție if?

Ian Smith Ian Smith
25 aug. 2023 21:25:06
4

Iată ce am făcut pentru a configura SSL pentru unul dintre clienți.

1: Am adăugat acest cod în wp-config.php pentru a activa SSL în partea de administrare.

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

2: Asigurați-vă că în Setări -> Generale URL-ul din ambele câmpuri începe cu https://.

3: Am introdus acest fragment de cod (modificat după acest tutorial) în functions.php pentru a redirecționa toate linkurile interne non-HTTPS către echivalentele lor HTTPS.

function wpse_ssl_template_redirect() {
    if ( !is_ssl() ) {
        if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
            wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']), 301 );
            exit();
        } else {
            wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
            exit();
        }
    }
}

add_action( 'template_redirect', 'wpse_ssl_template_redirect', 1 );
29 iul. 2013 16:49:47
Comentarii

Dar cum ajută acest lucru cu resursele?

Rarst Rarst
29 iul. 2013 16:54:11

Resursele ar trebui să primească prefixul https prin setarea URL-urilor în Setări -> Generale, cu excepția cazului în care linkurile sunt hard-codate în conținutul postării în sine.

montrealist montrealist
29 iul. 2013 17:10:19

Dacă totul ar fi setat corect, nu ar mai fi nicio întrebare... :)

Rarst Rarst
29 iul. 2013 17:11:31

Vreau să redirecționez imaginile vechi adăugate la https. Acest lucru nu funcționează pentru mine.

Bilal Hussain Bilal Hussain
4 iul. 2017 08:48:27
0

Aș recomanda editarea fișierului .htaccess sau crearea unuia.

Exemplu care include codul implicit WordPress:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
22 mai 2019 14:02:37
0

Redirecționarea HTTP către HTTPS la nivel de server (de exemplu, în blocul serverului Nginx sau în fișierul .htaccess dacă utilizați servere de tip Apache) este întotdeauna un punct de plecare bun pentru această problemă.

De asemenea, dacă utilizați un proxy precum Cloudflare, puteți forța redirecționarea tuturor cererilor către HTTPS din pagina lor de setări SSL. Dacă trebuie să rescrieți situații neobișnuite, cum ar fi unele resurse vechi de tip http://cdn.example.com pe care serverul dvs. web nu le poate manipula, atunci puteți utiliza funcția Page Rules din Cloudflare și să redirecționați acele cereri cu o regulă de genul:

http://cdn.example.com/* >>> 301 REDIRECT >>> https://example.com/wp-content/$1

Dar niciuna dintre aceste soluții nu rezolvă problema legăturilor interne hardcodate sau a resurselor statice care încă pot fi încărcate prin HTTP, cu cod de tipul <script src="http://example.com/foo.js">.

Cu timpul, echipa dvs. va trebui probabil să actualizeze manual astfel de resurse oriunde acestea sunt încărcate, fie în fișierele de șablon ale temei, în articole sau pagini etc. Căutarea/înlocuirea URL-urilor absolute în baza de date poate ajuta parțial, dar tot nu va repara resursele hardcodate în fișierele de șablon și ar putea să rateze și șirurile de date serializate în MySQL dacă nu acordați atenție.

În majoritatea cazurilor, rescrierea forțată a acestor resurse „încăpățânate” necesită o combinație de javascript executat din mers și/sau direcționarea încărcării acestor resurse prin intermediul WordPress. Dar, deoarece mulți designeri web nu urmează cele mai bune practici, uneori javascript este singura soluție cu adevărat eficientă.

Aceasta este de fapt ceea ce fac unele pluginuri gratuite, cum ar fi Force HTTPS (pluginul echipei mele, deși nu a fost actualizat de ceva timp) și multe altele.

19 aug. 2022 14:05:28