apache - httpd - Redirigir HTTP a HTTPS en el host virtual predeterminado sin ServerName
ubuntu apache2 redirect http to https (3)
En mi servidor Apache, me gustaría poder redirigir todas las solicitudes HTTP entrantes a la solicitud https equivalente. El problema es que me gustaría poder hacer esto para mi host virtual predeterminado sin especificar ServerName
y hacer que el redireccionamiento funcione con el nombre del servidor que aparezca en la url de la solicitud. Espero algo como esto:
NameVirtualHost *:80
<VirtualHost *:80>
RedirectPermanent / https://%{SERVER_NAME}/
...
</VirtualHost>
¿Es posible usar Redirect
o tendré que recurrir a Rewrite
?
Ambos funcionan bien. Pero de acuerdo con los documentos de Apache , debes evitar usar mod_rewrite
para redirecciones simples, y usar Redirect
lugar. Entonces, según ellos, lo mejor es que hagas:
<VirtualHost *:80>
ServerName www.example.com
Redirect / https://www.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
</VirtualHost>
El primer /
después de Redirect
es la url, la segunda parte es donde debe ser redirigido.
También puede usarlo para redirigir las URL a un subdominio: Redirect /one/ http://one.example.com/
Esta es la forma completa de omitir los redireccionamientos innecesarios también;)
Estas reglas están destinadas a ser utilizadas en archivos .htaccess, ya que una RewriteRule en una entrada *: 80 VirtualHost no necesita condiciones.
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
Emplanaciones :
RewriteEngine on
==> activar el motor en absoluto
RewriteCond %{HTTPS} off [OR]
==> coincidencia en conexiones no https , o (no establecer [OR] causaría un AND implícito!)
RewriteCond %{HTTP:X-Forwarded-Proto} !https
==> coincidencia en las conexiones reenviadas (proxy, loadbalancer, etc.) sin https
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
==> si una de las dos condiciones coincide, reescriba toda la URL, envíe un 301 para que el cliente lo "aprenda" (algunos lo hacen, otros no) y la L para la última regla.
Intenta agregar esto en tu configuración de vhost:
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]