security redirect to - Come reindirizzare tutte le richieste HTTP a HTTPS




9 Answers

Aggiornamento: Sebbene questa risposta sia stata accettata qualche anno fa, si noti che il suo approccio è ora sconsigliato dalla documentazione di Apache. Utilizza invece un Redirect . Vedi questa risposta

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Source

htaccess da

Sto provando a reindirizzare tutte le richieste HTTP non sicure sul mio sito (ad esempio http://www.example.com ) su HTTPS ( https://www.example.com ). Sto usando PHP btw. Posso farlo in .htaccess?




Lo raccomanderei con il reindirizzamento 301:

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



Ho scoperto che il modo migliore per https e www su dominio è

RewriteCond %{HTTPS} off 
RewriteCond %{HTTPS_HOST} !^www.cheapcarhire.gr$ [NC]
RewriteRule ^(.*)$ https://www.cheapcarhire.gr/$1 [L,R=301]



Questo è l'approccio di reindirizzamento html funziona ma non il migliore.

 <meta http-equiv="Refresh" content="0;URL=https://www.example.com" />

Approccio PHP

<?php
function redirectTohttps() {
    if ($_SERVER['HTTPS']!="on") {
        $redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header("Location:$redirect"); 
    } 
}
?>

.htaccess approch

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

copiato da: www.letuslook.org




Aggiungi il seguente codice al file .htaccess:

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://[your domain name]%{REQUEST_URI} [R,L]

Dove [il tuo nome di dominio] è il nome di dominio del tuo sito web.

Puoi anche reindirizzare cartelle specifiche fuori dal tuo nome di dominio sostituendo l'ultima riga del codice sopra con:

RewriteRule ^ https://[your domain name]/[directory name]%{REQUEST_URI} [R,L]



La soluzione migliore dipende dalle tue esigenze. Questo è un riassunto delle risposte precedentemente pubblicate con qualche contesto aggiunto.

Se si lavora con il server Web Apache e si può modificare la sua configurazione, seguire la documentazione di Apache :

<VirtualHost *:80>
    ServerName www.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

Ma hai anche chiesto se puoi farlo in un file .htaccess . In tal caso puoi utilizzare Apache's RewriteEngine :

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

Se tutto funziona correttamente e desideri che i browser ricordino questo reindirizzamento, puoi dichiararlo come permanente modificando l'ultima riga in:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Ma fai attenzione se puoi cambiare idea su questo reindirizzamento. I browser lo ricordano per un tempo molto lungo e non controlleranno se è cambiato.

Potrebbe non essere necessario il RewriteEngine On della prima riga, a seconda della configurazione del server web.

Se cerchi una soluzione PHP, guarda l' array $ _SERVER e la funzione header :

if (!$_SERVER['HTTPS']) {
    header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
} 



Attraverso .htaccess Questo aiuterà.

RewriteEngine On


RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Inoltre, fai riferimento a Ulteriori dettagli. Come reindirizzare Http to Https?




A meno che non sia necessario mod_rewrite per altre cose, l'utilizzo della direttiva IF di nucleo di Apache è più semplice e veloce:

<If "%{HTTPS} == 'off'">
Redirect permanent / https://yoursite.com/
</If>

È possibile aggiungere più condizioni alla direttiva IF, ad esempio garantire un singolo dominio canonico senza il prefisso www:

<If "req('Host') != 'myonetruesite.com' || %{HTTPS} == 'off'">
Redirect permanent / https://myonetruesite.com/
</If>

C'è molta inerzia nella familiarità nell'uso di mod_rewrite per tutto, ma vedi se questo funziona per te.

Maggiori informazioni: https://httpd.apache.org/docs/2.4/mod/core.html#if

Per vederlo in azione (prova senza www. O https: //, o con .net invece di .com): https://nohodental.com/ (un sito su cui sto lavorando).




Un altro vantaggio rispetto a questo problema è quando entra in gioco un Load Balancer.

La situazione è la seguente: - Traffico dal browser a Load Balancer e ritorno, è (dovrebbe essere) HTTPS - Il traffico tra Load Balancer e il WebServer effettivo è HTTP.

Quindi, tutte le variabili di richiesta del server in PHP o Apache mostrano che la connessione è solo HTTP. E le directory HTTP e HTTPS sul server sono le stesse.

La RewriteCondition nella risposta approvata non funziona. Dà o un ciclo o semplicemente non funziona.

La domanda è: come farlo funzionare su un Load Balancer.

(O il Load Balancer è configurato in modo errato, che è quello che spero perché poi posso trasferire il problema alla società WebHosting :-))




Related