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 .htaccess
para 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.conf
anulaba 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.conf
solo 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.