Https al reindirizzamento http utilizzando htaccess

Sto cercando di redirect https://www.example.com a http://www.example.com . Ho provato il seguente codice nel file .htaccess

RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

Questo codice reindirizza correttamente https://example.com a http://www.example.com . Tuttavia, quando digito https://www.example.com , mi viene restituito un errore “pagina web non disponibile” nel browser.

Ho anche provato i seguenti 2 codici senza successo

Tentativo 1

 RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/(.*):NOSSL$ http://www.example.com/$1 [R=301,L] 

Tentativo 2

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

Entrambi i tentativi precedenti hanno fallito. Eventuali suggerimenti?

Il tentativo 2 era vicino alla perfezione. Basta modificarlo leggermente:

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

Tuttavia, se il tuo sito web non ha un certificato di sicurezza, si trova su un ambiente di hosting condiviso e non vuoi ricevere il “warning” quando il tuo sito web viene richiesto tramite https, non puoi redirect usando htaccess. Il motivo è che il messaggio di avvertimento viene triggersto prima che la richiesta passi anche al file htaccess, quindi è necessario correggerlo sul server. Vai a /etc/httpd/conf.d/ssl.conf e commenta la parte relativa al server virtuale 443. Ma le probabilità sono che il tuo provider di hosting non ti dia tanto controllo. Dovresti quindi spostarti su un altro host o acquistare l’SSL, in modo che l’avviso non si attivi prima che il tuo htaccess abbia la possibilità di redirect.

 RewriteEngine On RewriteCond %{SERVER_PORT} 443 RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

Puoi utilizzare la seguente regola per redirect da https a http :

  RewriteEngine On RewriteCond %{HTTPS} ^on$ RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

Spiegazione :

 RewriteCond %{HTTPS} ^on$ 

Controlla se l’HTTPS è attivo (la richiesta è fatta usando https)

Poi

 RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

Reindirizza qualsiasi richiesta ( https://example.com/foo ) a http://example.com/foo .

  • $ 1 fa parte della regex nel pattern RewriteRule, contiene qualsiasi valore catturato in (. +) , In questo caso cattura tutto il request_uri dopo il nome del dominio.

  • [NC, L, R] sono i flag, NC rende il caso uri sensibile, è ansible utilizzare lettere maiuscole o minuscole nella richiesta.

Il flag L indica al server di interrompere l’elaborazione di altre regole se la regola currunt corrisponde, è importante utilizzare il flag L per evitare conflitti di regole quando si hanno più regole in un blocco.

La bandiera R è usata per effettuare un reindirizzamento esterno.

La differenza tra http e https è che le richieste https vengono inviate tramite una connessione crittografata con ssl. La connessione criptata con ssl deve essere stabilita tra il browser e il server prima che il browser invii la richiesta http.

Le richieste Https sono in realtà richieste http che vengono inviate tramite una connessione crittografata con SSL. Se il server rifiuta di stabilire una connessione criptata con ssl, il browser non avrà alcuna connessione per inviare la richiesta. Il browser e il server non avranno modo di parlarsi. Il browser non sarà in grado di inviare l’url a cui desidera accedere e il server non sarà in grado di rispondere con un reindirizzamento a un altro URL.

Quindi questo non è ansible. Se si desidera rispondere ai collegamenti https, è necessario un certificato SSL.

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

Il tuo codice è corretto Basta inserirli in

Esempio:

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