htaccess force https and redirect www to non-www, but no other subdomains
.htaccess, apache, https, mod-rewrite, regex
Solution
Put this code in your `DOCUMENT_ROOT/.htaccess` file:
RewriteEngine On
# remove www and add https
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]
# add https
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Problem
I know there are many similar threads, but none of them seems to match my exact problem. Here is what I’m trying to do: ``` (1) http://www.mydomain.com/ -> https://mydomain.com/ (2) http://mydomain.com/ -> https://mydomain.com/ (3) https://www.mydomain.com -> https://mydomain.com/ ``` Ideally, I would also like to cover the situation if I will ever add more subdomains, to automatically behave like the following (preferably in a generic way that will work for any subdomain I add). ``` (4) http://sub.mydomain.com/ -> https://sub.mydomain.com/ ``` At this point I’m wondering if it is even possible to create a single .htaccess file that does everything I need, although I have to admit that I understand regexes, but I’m not exactly a mod_rewrite uberpro. Here are the solutions that I already tried: - Force non-www and https via htaccess - Sort of works, but seems to generate a redirect loop - .htaccess redirect www to non-www with SSL/HTTPS - Works for (1) and (3), but not for (2) - htaccess force www to non-www with consideration of http or https - Redirects to http://mydomain.com/ (without https) for (1) - Does nothing for (2) - Redirects to http://mydomain.com/ (without https) for (3) My SSL certificate covers the www-subdomain, so I’m not looking for a 'untrusted connection' error solution, I’m aware that isn’t possible.