2012-11-02 15 views
8

Ho scoperto oggi che se si visita un sito EE che utilizza il tag {site_url} nel percorso del collegamento css nel capo del documento, che il sito non può caricare il file CSS se si digita https anziché http.HTTPS e HTTP ExpressionEngine Tag URL sito

Ho capito questo utilizzando un file htaccess per forzare l'http, ma mi chiedevo se c'era un'impostazione all'interno di EE che è possibile modificare per far funzionare entrambi?

Questo è successo solo su Chrome e IE, sto indovinando dipende da ciò che il browser è configurato per consentire la sicurezza saggio.

risposta

5

Quando carico CSS e JS non utilizzo mai il dominio, ma lo imposto in modo relativamente relativo. per esempio:

<link rel="stylesheet" href="/layout/styles/layout.css" > 

Se si prova questo funziona?

+0

Gareth potrebbe usare {stylesheet =} per ottenere i vantaggi di ciò, nel qual caso il comportamento che menzionerebbe si presenterebbe. –

+0

Ciao Sean sì, ha funzionato bene ed è quello che ho finito per fare. La risposta Deviarte sopra sembra una soluzione interessante? – Gareth

7

Ho avuto un grande aiuto su questo problema previously. Spero sia utile anche a te ora.

+1

Hey Scott - notato che hai aiutato con alcune domande EE. Sarebbe fantastico se potessi supportare la nostra proposta di scambio di stack EE qui: http://area51.stackexchange.com/proposals/46387/expressionengine?referrer=AwnV9oYF5EKlETXKp3ZQQw2 (abbiamo bisogno di persone con oltre 200 rappresentanti) –

+0

Grazie per questo Scott. – Gareth

3

È possibile utilizzare PHP nel file system/expressionengine/config/config.php per impostare la configurazione {site_url}, incluso il protocollo, in modo dinamico. Qualcosa di simile a questo:

// Detect protocol and server host 
$protocol = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 
$base_url = $protocol . $_SERVER['HTTP_HOST']; 

// Set EE index page 
$config['index_page'] = ""; 

// Set base and site URL 
$config['base_url'] = $base_url . "/" . $config['index_page']; 
$config['site_url'] = $config['base_url']; 

È possibile creare i percorsi tematici, vari percorsi delle immagini, percorsi di upload, ecc il tutto da quella base in config.php. Ma $config['site_url'] è ciò che influenza l'output dei tag {path=""} e {stylesheet}.

Per ulteriori idee, vedere NSM's Config Bootstrap file o l'articolo Configuring ExpressionEngine for multiple servers. Per tutti i percorsi è possibile impostare in config.php, vedere EE2 Config Overrides

6

Pochi sanno che è possibile utilizzare relativo a protocollo URL per le attività

Esempio:

<link rel="stylesheet" href="//www.site.com/site.css"> 
<script type="text/javascript" src="//www.site.com/site.js"></script> 

Se il browser sta visualizzando una pagina in SSL attraverso HTTPS, quindi richiederà quell'asset con il protocollo https, altrimenti lo richiederà con HTTP.

Questo impedisce a questo messaggio di errore "Questa pagina contiene elementi protetti e non protetti" in IE, mantenendo tutte le richieste di risorse all'interno dello stesso protocollo.

maggiori informazioni

da here:

Un parente URL senza uno schema (http: o https :) è valido, per RTF 3986: Sezione 4.2. Se un cliente lo soffoca, , è colpa del client perché non sono conformi alla sintassi URI specificata nell'RFC.

Il tuo esempio è valido e dovrebbe funzionare. Ho utilizzato il metodo URL relativo personalmente su siti con traffico intenso e lo non ha ricevuto reclami. Inoltre, abbiamo testare i nostri siti in Firefox, Safari, IE6, IE7 e Opera.Questi browser tutti capiscono che il formato dell'URL

+0

Questa è una soluzione buona ed elegante! Ma attenzione: EE a quanto pare non gli piace avere "site_url" impostato in questo modo, FWIW. –

+0

Grazie per questo Deviarte, immagino che se si desidera utilizzare una variabile globale nei modelli, sarà sufficiente crearne uno che utilizza //www.site.com perché lo standard {site_url} emette solo l'http? – Gareth

0

Io uso Nginx.

Non so perché, ma le risorse di carico significativamente più veloce in vari browser se uso URL assoluti (il percorso completo) invece di relativa (/ per avviare la stringa al dominio as CreateSean said, // per iniziare la stringa al protocollo as Deviarte said) (o è che si caricano più lentamente con gli URL relativi? Non lo so.). Ergo, nessuna delle loro soluzioni/pratiche (entrambe le cose che ero solito fare ... e continuano a fare) sono preferibili per i miei ambienti in questi giorni.

Invece quello che ho fatto è il seguente nel config.php:

$config['base_url'] = $_SERVER["scheme_url"]; 
$config['site_url'] = $_SERVER["scheme_url"]; 

Si prega di notare che si potrebbe essere necessario fornire PHP con scheme_url se non esiste già. Se, come me, si utilizza php-fpm solo aggiungere questo per la configurazione come/dove necessario nella configurazione del sito nginx (s):

fastcgi_param scheme_url "$scheme://$host/"; 

modificare:

Guardandosi intorno bootstrap/configurazioni e un certo uso il metodo di anteporre il protocollo alle variabili di configurazione (ad esempio, comment by unexplainedBacn above). In Nginx di default non v'è alcuna variabile del server HTTPS, nella configurazione host virtuale per php sotto ssl aggiungere il seguente:

fastcgi_param HTTPS on; 
1

Tutti,

Ecco come ho usato Apache e il file config.php riscrivi gli URL in modo da non attivare "avvisi di contenuto non SSL" dai browser. Sto ancora utilizzando il {percorso} e {} fogli di stile variabili nei miei modelli perché sono semplicemente troppo buona per lasciarsela sfuggire :)

Nel file .htaccess di Apache:

# Set an Apache 'site_url' variable to http when accessed via http: 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ - [E=site_url:http://mysite.com] 


# Set Apache 'site_url' variable to https when accessed via https 
RewriteCond %{SERVER_PORT} 443 
RewriteRule ^(.*)$ - [E=site_url:https://mysite.com] 

Poi, nel sistema/ExpressionEngine/config.php

Aggiungere le seguenti due righe di codice (assicurati di non aver impostato queste variabili altrove nel file di configurazione)

$config['base_url'] = $_SERVER["site_url"]; 
$config['site_url'] = $_SERVER["site_url"]; 

Come ho capito, la variabile site_url è ciò che EE usa per {stylesheets} e {paths} in EE.

La proverbiale 'Un'ultima cosa':

Se si sta ancora ricevendo l'avviso non SSL, appena vista di origine e la ricerca di 'http: //' nell'origine. Questi sono i colpevoli. Sono link hard coded che non vengono impostati con le variabili base_url/site_url.

È necessario individuare tali chiamate http nei propri messaggi/modelli/variabili/snippet e sostituire tali chiamate con un // semplice.
Quindi una chiamata a

http://example.com/some_file.html 

dovrebbe apparire così:

//example.com/some_file.html. 

Questo funziona per gli URL assoluti e relativi.

Questo vale anche per il percorso impostato sulle directory di caricamento del file EE. Si assicura modificare l'URL di queste directory per assomigliare a questo

//example.com/path/to/your/upload/directory 

E voilà, si dovrebbe essere pronti per partire :)

Problemi correlati