I'm hoping someone can help me, as for years I've always tried different approaches to redirecting and came across an interesting one on a project I'm working on.

I need HTTP to redirect to HTTPS
AND
I need non-www to redirect to www but only if //domain.com without any subdomains
AND
I need subdomain.domain.com to still work so do not redirect the subdomain, i'm using wildcard (\*) in apache to handle any subdomain as these will be detected in php with $\_SERVER and handled for specific tasks.

This is what I have so far however the non-www (//domain.com) ends up in an endless redirect

```
RewriteEngine On
Options -Indexes

RewriteCond %{HTTPS} off [OR]
# add www if not subdomain
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} off [OR]
# remove www if subdomain
RewriteCond %{HTTP_HOST} ^www\.([^.]+\.[^.]+\.[^.]+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

```

Apache virtual hosts two different files one for non SSL and one for SSL using lets encrypt

```
<VirtualHost *:80>
    DocumentRoot /var/www/html/www.domain.com
    ServerName domain.com
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =domain.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/html/www.domain.com
    ServerName www.domain.com
    ServerAlias *.domain.com
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.domain.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:443>
    ServerName www.domain.com
    ServerAlias *.domain.com
    DocumentRoot /var/www/html/www.domain.com
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =domain.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
</VirtualHost>

<VirtualHost *:443>
    ServerName domain.com
    DocumentRoot /var/www/html/www.domain.com
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/domain.com-0001/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.com-0001/privkey.pem
</VirtualHost>

```

All your help greatly appreciated!