Come forzare il caricamento delle risorse statiche con sorgenti HTTP tramite HTTPS?

29 lug 2013, 10:47:48
Visualizzazioni: 23.9K
Voti: 4

(Sto usando il plugin Wordpress HTTPS per forzare la modalità Admin a funzionare con HTTPS.
Funziona bene per il Pannello di Amministrazione.)

Tuttavia, quando sono in modalità HTTPS, tutte le pagine frontend sono danneggiate perché alcuni File Asset delle pagine frontend arrivano come normale HTTP (senza 'S') che vengono poi bloccati durante il caricamento della pagina.

Di conseguenza la pagina viene visualizzata in modo disordinato.

Per essere più chiaro:

  • Quando richiamo il sito in modalità HTTPS / SSL .. alcuni file di risorse, come:
    • http://www.my-another-site.com/something.js
    • http://www.my-another-site.com/something.css
    • http://www.my-another-site.com/something.jpg
    • ... ecc

.. sono DANNEGGIATI. (Perché sono in modalità https e i file sopra arrivano come http)

Quindi come fare per far sì che WordPress FORZI IL CARICAMENTO di questi file?
(NON MI INTERESSA SE È SICURO O MENO. Voglio solo che il sito sotto https://... venga visualizzato correttamente.)

1
Commenti

Installa SSL Insecure Content Fixer ed esegui il test "test is_ssl()" nella riga del menu del plugin. Questo verificherà se sei dietro un reverse proxy, che impedisce a WordPress di rilevare SSL. Inoltre, in base a ciò che rileva, offrirà una soluzione.

webaware webaware
30 lug 2013 01:41:34
Tutte le risposte alla domanda 5
0

Se gli asset vengono accodati correttamente, utilizzano esattamente l'URL con cui sono stati accodati. Se il protocollo nell'URL è hardcodato, ciò causa i problemi di mancata corrispondenza che stai riscontrando.

Per un corretto supporto del protocollo, gli URL accodati devono essere:

  • creati con funzioni API di WordPress che tengono conto del protocollo (la maggior parte, se non tutte, le funzioni che producono URL lo fanno)
  • utilizzare il formato relativo al protocollo come //example.com/stylesheet.css

Se i link provengono da codice di terze parti, dovrai annullare la registrazione e registrare nuovamente la risorsa di conseguenza o (nel peggiore dei casi se la coda non viene utilizzata) riscrivere il codice / far sì che lo sviluppatore originale lo faccia.

29 lug 2013 16:59:10
3

Se stai utilizzando i bilanciatori di carico AWS con terminazione SSL, ecco cosa ho fatto:

Supponendo che tu abbia configurato il tuo ELB AWS per gestire la terminazione SSL e inoltrare il traffico al tuo Target Group Wordpress:

Su wp-config.php:

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

// Aggiornamento 8-Aprile-2018: Ho spostato il reindirizzamento HTTPS dalla configurazione del server virtuale Apache a wp-config.php utilizzando questo snippet.
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
   $_SERVER['HTTPS']='on';

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

20 lug 2022 20:16:17
Commenti

Soluzione intelligente per i bilanciatori di carico... funziona per tutti i tipi di risorse statiche come immagini, script e collegamenti ipertestuali interni?

Jesse Nickles Jesse Nickles
19 ago 2022 13:33:05

@JesseNickles sì

cilantro cilantro
10 nov 2022 19:10:58

Cosa fa esattamente quella condizione if?

Ian Smith Ian Smith
25 ago 2023 21:25:06
4

Ecco cosa ho fatto per configurare SSL per uno dei clienti.

1: Ho inserito questo nel file wp-config.php per abilitare SSL nella parte amministrativa.

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

2: Assicurarsi che in Impostazioni -> Generali l'URL in entrambi i campi sia preceduto da https://

3: Ho inserito questo snippet (modificato da questo tutorial) nel file functions.php per reindirizzare tutti i link interni non-HTTPS alle loro versioni 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 lug 2013 16:49:47
Commenti

Ma come questo aiuta con gli asset?

Rarst Rarst
29 lug 2013 16:54:11

Gli asset dovrebbero ottenere il prefisso https impostando gli URL in Impostazioni -> Generale, a meno che i link non siano hard-coded nel contenuto del post stesso.

montrealist montrealist
29 lug 2013 17:10:19

Se tutto fosse impostato correttamente, non ci sarebbe una domanda... :)

Rarst Rarst
29 lug 2013 17:11:31

Voglio reindirizzare le mie vecchie immagini aggiunte all'https. Questo non funziona per me.

Bilal Hussain Bilal Hussain
4 lug 2017 08:48:27
0

Ti consiglio di modificare il file .htaccess o di crearne uno nuovo.

Esempio incluso il codice predefinito di WordPress:

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

# INIZIO 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>
# FINE WordPress
22 mag 2019 14:02:37
0

Reindirizzare HTTP a HTTPS a livello di server (ad esempio nel blocco del server Nginx, o nel file .htaccess se utilizzi server di tipo Apache) è sempre un buon punto di partenza.

Allo stesso modo, se utilizzi un proxy come Cloudflare, puoi forzare il reindirizzamento di tutte le richieste a HTTPS dalla pagina delle impostazioni SSL. Se hai bisogno di riscrivere situazioni meno comuni, come alcuni vecchi asset http://cdn.example.com che il tuo server web non può manipolare, puoi utilizzare la funzionalità Page Rules di Cloudflare e reindirizzare quelle richieste con una regola come questa:

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

Ma nessuna di queste soluzioni risolve il problema dei link interni hardcoded o degli asset statici che potrebbero ancora essere richiamati tramite HTTP, con codice come <script src="http://example.com/foo.js">

Con il tempo, il tuo team dovrà probabilmente aggiornare manualmente tali asset ovunque siano caricati, che si tratti di file template del tema, post e pagine, ecc. Sostituire tramite ricerca nel database gli URL assoluti può aiutare un po', ma non risolverà gli asset hardcoded nei file template e potrebbe anche mancare stringhe di dati serializzati in MySQL se non fai attenzione.

Nella maggior parte dei casi, forzare la riscrittura di questi asset "ostinati" richiede una combinazione di javascript on-the-fly e/o il targeting del caricamento di questi asset da parte di WordPress. Ma, poiché molti web designer non seguono le best practice, a volte significa che ad esempio javascript è l'unica soluzione veramente efficace.

Questo è ciò che fanno alcuni plugin gratuiti, come Force HTTPS (il plugin del mio team, anche se non è stato aggiornato da un po') e diversi altri.

19 ago 2022 14:05:28