/ / Reindirizzamento da HTTP a HTTPS con Apache: apache, redirect, mod-rewrite, ubuntu

Reindirizzamento da HTTP a HTTPS con Apache: apache, redirect, mod-rewrite, ubuntu

Ho un problema con mod_rewrite per forzare il reindirizzamento delle richieste HTTP su HTTPS usando Apache 2.2.22 su Ubuntu Server 12.04.

Il mio file / etc / apache2 / sites-available / default è il seguente:

    <VirtualHost *:80>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>

L'host HTTPS è definito in ssl predefinito nella stessa directory.

Visitando l'indirizzo IP locale del server, ilil reindirizzamento sembra funzionare correttamente. Tuttavia, accedendo tramite il nome di dominio completo, non utilizza il nome FQDN, il sito è disponibile sulla porta 5443, che è mappata nel firewall su 443 sul server, quindi forse questo ha qualcosa a che fare con il problema. basta usare direttamente la porta 443, poiché è in uso su questo indirizzo IP da un altro server.

Per chiarire ulteriormente, i seguenti sono collegamenti validi:

    https://website:5443
https://192.168.200.80:443

Il reindirizzamento funziona qui:

    http://192.168.200.80

Ma quanto segue fornisce una 400 Bad Request, ed è qui che è necessario il reindirizzamento:

    http://website:5443/

"Il tuo browser ha inviato una richiesta che questo server non è riuscito a capire. Motivo: stai parlando semplicemente HTTP a una porta del server abilitata per SSL. Utilizza invece lo schema HTTPS per accedere a questo URL, per favore. "

risposte:

8 per risposta № 1

Questo è totalmente possibile. Il seguente reindirizza tutto http all'URL https.

<VirtualHost *:80>
ServerName   mydomainname.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

assicurati di caricare il modulo di riscrittura mod_rewrite e abilitarlo.


2 per risposta № 2

Il tuo problema qui è la richiesta HTTP iniziale: Questo non funziona quando il server non capisce di aver ricevuto la richiesta sulla porta 443 (come suggerisce il codice di risposta).

Se non viene fornita alcuna porta, il protocollo http il valore predefinito è 80, https alla porta 443.

Questo è anche il motivo per cui il tuo reindirizzamento locale funziona. Scommetto che se accedi alla pagina http://website/ (con corretto port forwarding della porta 80), funzionerà pure. Nota anche che il tuo VirtualHost è comunque definito solo per la porta 80, quindi non sarà valido per le richieste inviate a website:5443 (o website:443).

In generale, hai bisogno di un server che accetti entrambiRichieste HTTP e HTTPS su una singola porta. Non sono sicuro che nessun server popolare in realtà supporti qualcosa del genere, perché (penso) in sostanza viola le specifiche.


1 per risposta № 3

se vuoi reindirizzare il tuo sito da http:// anything.example.com a https: //anything.example.com ... Basta creare un file .conf di hosting dedicato come /etc/httpd/conf.d/dedicated.conf e altri file di conf come virtual.conf. .. le voci per dedicated.conf sono le seguenti ....

questo è un file conf dedicato per l'hosting del server per reindirizzarlo a https ... [di] [1]

<virtualhost *:80>
servername host.example.com
documentroot /var/www/html
rewriteengine on
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
sslcertificatefile /etc/pki/tls/certs/name.crt
sslcertificatekeyfile /etc/pki/tls/private/name.key
</virtualhost>
<directory /var/www/html>
allowoverride all
require all granted
</directory>

0 per risposta № 4
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]