Redirect HTTP to HTTPS on default virtual host without ServerName Redirect HTTP to HTTPS on default virtual host without ServerName apache apache

Redirect HTTP to HTTPS on default virtual host without ServerName


Try adding this in your vhost config:

RewriteEngine OnRewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]


Both works fine. But according to the Apache docs you should avoid using mod_rewrite for simple redirections, and use Redirect instead. So according to them, you should preferably do:

<VirtualHost *:80>    ServerName www.example.com    Redirect / https://www.example.com/</VirtualHost><VirtualHost *:443>    ServerName www.example.com    # ... SSL configuration goes here</VirtualHost>

The first / after Redirect is the url, the second part is where it should be redirected.

You can also use it to redirect URLs to a subdomain:Redirect /one/ http://one.example.com/


This is the complete way to omit unneeded redirects, too ;)

These rules are intended to be used in .htaccess files, as a RewriteRule in a *:80 VirtualHost entry needs no Conditions.

RewriteEngine onRewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP:X-Forwarded-Proto} !httpsRewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

Eplanations:

RewriteEngine on

==> enable the engine at all

RewriteCond %{HTTPS} off [OR]

==> match on non-https connections, or (not setting [OR] would cause an implicit AND !)

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

==> match on forwarded connections (proxy, loadbalancer, etc.) without https

RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

==> if one of both Conditions match, do the rewrite of the whole URL, sending a 301 to have this 'learned' by the client (some do, some don't) and the L for the last rule.