La redirección de Apache de http a https no funciona

La redirección de Apache de http a https no funciona

Tengo los siguientes archivos de configuración:

archivo1:

NameVirtualHost  123.45.67.890:80

<VirtualHost 123.45.67.890:80>
    ServerName example.com

    RedirectPermanent / https://example.com/

#   RewriteEngine On
#   RewriteCond %{SERVER_PORT} !^443$
#   RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]

#   SSLRequireSSL
#   Redirect permanent /secure https://example.com/

#   Redirect / https://example.com/
</VirtualHost>

Como puede ver en las líneas comentadas, he probado varios enfoques.

archivo2:

NameVirtualHost 123.45.67.890:443

<VirtualHost 123.45.67.890:443>
    DocumentRoot "/opt/www/example-docroot"
    ServerName example.com
    DirectoryIndex index.html
    SSLEngine on

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/httpd/conf.d/ssl/example.com/csr.example.2011.pem.blade
    SSLCertificateKeyFile /etc/httpd/conf.d/ssl/example.com/nokey.example.2011.pem
    SSLCACertificateFile /etc/httpd/conf.d/ssl/example.com/CA.blade.2011.csr

    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/etc/httpd/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
</VirtualHost>

Se eliminó algo por simplicidad, se cambiaron los nombres para proteger a los inocentes.

Actualizo estos archivos en el servidor /etc/httpd/vhosts

entonces corre

apachectl restart

Lo que me da estas advertencias:

[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts

Tenemos numerosos vhosts ejecutándose desde este servidor. Las configuraciones anteriores parecen estar alineadas, por lo que no creo que estas advertencias se apliquen aquí. Puede estar mal.

Al actualizar la página 80 (http) predeterminada en mi navegador, siempre se muestra la página http predeterminada.

¿Alguna sugerencia sobre cómo hacer que funcione la redirección?

Respuesta1

Muchos ejemplos funcionan en configuraciones específicas. Éste siempre funciona, sin importar qué configuración utilice su servidor Apache:

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]

Respuesta2

Me enfrenté exactamente al mismo problema hace unos días. Intenté lo siguiente en mi configuración de VirtualHost (aplicable para el puerto http 80) en el archivo apache httpd.conf que funcionó.

<Virtualhost *:80>
ServerAdmin [email protected]
ServerName site.com
ServerAlias site.com www.site.com

RedirectMatch permanent ^(.*)$ https://www.site.com$1
</Virtualhost>

Esto funciona de maravilla y no necesita ninguna configuración en ningún otro lugar ni ningún módulo adicional.

Respuesta3

Mejor uso .htaccesspara esto (si es posible), no es necesario meterse con los archivos de configuración de Apache. Añade estas líneas al principio de tu .htaccess.

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

Respuesta4

Nuestro problema fue la precedencia del archivo de configuración. En resumen, HTTP VirtualHost 000-default.confanulaba la configuración que habíamos creado en nuestro propio archivo de configuración.

Esto resulta confuso para cualquiera que conozca el significado de la palabra "predeterminado", que significa algo que sólo se usa si no está definido en otra parte. Supusimos tontamente que eso 000-default.confsolo proporcionaría configuración si no estaba definida en otro archivo de configuración.

Estuvimos equivocados. Apache simplemente usa la configuración en el primer archivo que encuentra según el nombre del archivo en orden alfanumérico. Pasa al siguiente archivo si no puede encontrar un VirtualHost coincidente en ese archivo, lo que causa una confusión divertida si no sabes cómo funciona, pero es bastante claro una vez que lo sabes.

información relacionada