Forzare HTTPS usando .htaccess - bloccato in un loop di reindirizzamento

13 apr 2014, 23:40:34
Visualizzazioni: 23.3K
Voti: 4

Il mio sito WordPress si trova su example.com/wordpress e ho bisogno che tutto il contenuto sia accessibile solo tramite SSL.

Ho creato una regola .htaccess che reindirizza da http a https:

RewriteEngine On
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]

Dopo aver implementato questa regola il sito web non è accessibile poiché è bloccato in un loop di reindirizzamento.

Cosa sto sbagliando?

Il mio .htaccess di WordPress:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/directory/index.php [L]
</IfModule>
0
Tutte le risposte alla domanda 5
2

Questa è una risposta tardiva ma funziona per me:

Modifica il RewriteCond in questo modo

RewriteCond %{HTTP:X-Forwarded-Proto} !https

Dovrebbe essere così:

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://tudominio.com/$1 [R,L]
19 ott 2015 18:13:19
Commenti

Alla fine ha funzionato per me. Qualcuno può spiegare perché questa RewriteCond funziona quando RewriteCond %{HTTPS} off non funziona?

Peter G Peter G
25 nov 2015 18:04:19

In alcuni casi, se la versione https del sito non è configurata tramite Apache ModSSL, non imposta la variabile %{HTTPS}

Shankar Prakash G Shankar Prakash G
12 ott 2018 22:46:45
9

Anche senza essere un esperto di htaccess, direi che ti manca una RewriteCond - Una condizione.

Verifica se è sulla porta 80. Prova questo:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]

AGGIORNAMENTO:

Dopo aver visto la tua domanda aggiornata, con l'htaccess completo - farei così:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/directory/index.php [L]

RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]
</IfModule>

Posizionando la tua condizione e regola sotto gli standard di Wordpress.

14 apr 2014 00:51:45
Commenti

Aggiungerlo al mio .htaccess non ha aiutato, sto riscontrando lo stesso problema di loop di reindirizzamento.

SkyHiRider SkyHiRider
14 apr 2014 01:02:48

Puoi copiare il tuo file htaccess allora? Inseriscilo nella domanda - modificherò la mia risposta per un altro tentativo!

Frederik Spang Frederik Spang
14 apr 2014 01:04:21

Prova RewriteCond %{HTTPS} off invece della condizione server_port.

Frederik Spang Frederik Spang
14 apr 2014 01:06:43

Non ha funzionato e il mio intero file .htaccess è già nella domanda :)

SkyHiRider SkyHiRider
14 apr 2014 01:15:33

Oh.. Dov'è la parte standard di Wordpress per .htaccess allora?

Frederik Spang Frederik Spang
14 apr 2014 01:16:06

Se non altro - Prova a includere di nuovo RewriteEngine On, sopra la mia risposta aggiornata!

Frederik Spang Frederik Spang
14 apr 2014 01:16:42

Hmm, forse è quello il problema - non ho nient'altro che questo nel mio .htaccess

SkyHiRider SkyHiRider
14 apr 2014 02:02:18

Ho ripristinato il .htaccess predefinito, ma il problema non è ancora risolto. Ho aggiornato la mia domanda.

SkyHiRider SkyHiRider
14 apr 2014 02:08:24

Ho aggiornato la mia risposta - Dovrei semplicemente combinarli allora?

Frederik Spang Frederik Spang
15 apr 2014 15:24:50
Mostra i restanti 4 commenti
0
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Fonte https://www.godaddy.com/help/redirect-http-to-https-automatically-8828

11 ott 2016 04:00:03
0
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

oppure per una singola pagina

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} directory
RewriteRule ^(.*)$ https://www.example.com/directory/$1 [R,L]

in alternativa puoi aggiungere questo codice PHP a un file specifico

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // se la richiesta non è sicura, reindirizza all'URL sicuro
$url = 'https://' . $_SERVER['HTTP_HOST']
. $_SERVER['REQUEST_URI'];

header('Location: ' . $url);
exit;
}

oppure combina le regole di riscrittura di WordPress con quelle per SSL

RewriteRule ^(.*)$ https://www.example.com/directory/index\.php[R,L]
14 apr 2014 12:08:18
0

I siti web dietro bilanciatori di carico o proxy inversi che supportano HTTP_X_FORWARDED_PROTO possono essere sistemati aggiungendo il seguente codice al file wp-config.php, sopra la chiamata require_once:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

oppure utilizzando un plugin

Aggiungi nella cartella dei plugin WordPress sul tuo sito, quindi attivalo nella sezione Plugin di amministrazione

<? /* Plugin Name: Imposta header */
if (stripos(get_option('siteurl'), 'https://') === 0) {
    $_SERVER['HTTPS'] = 'on';
    // aggiunge rilevamento JavaScript del protocollo della pagina, e spera!
    add_action('wp_print_scripts', 'force_ssl_url_scheme_script');
}
function force_ssl_url_scheme_script() {
    ?>
    <script>
    if (document.location.protocol != "https:") {
        document.location = document.URL.replace(/^http:/i, "https:");
    }
    </script>
    <?php
}

Fonte

Funziona convertendo

  • http://www.exmaple.com/blog/ in https://www.exmaple.com/blog/
  • http://www.exmaple.com/ in https://www.exmaple.com/
3 apr 2017 09:48:44