Apache htaccess重写规则-域/子域https/www

Apache htaccess重写规则-域/子域https/www,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有我的主域和一个子域。子域位于主域根目录的子目录中,无法更改。主域有SSL,而子域没有 现在,我试图强制主域使用https和www,强制子域使用nohttps和nowww。因此,在最后,不管主域将如何被访问,它都应该重定向到https://www.example.com和同一时间子域应为http://sub.example.com 访问它们的所有其他可能组合应重定向到上述2。到目前为止,我成功地做到了这一点,但在我使用https://sub.example.com。它不会重定向到http版本,

我有我的主域和一个子域。子域位于主域根目录的子目录中,无法更改。主域有SSL,而子域没有

现在,我试图强制主域使用
https
www
,强制子域使用no
https
和no
www
。因此,在最后,不管主域将如何被访问,它都应该重定向到
https://www.example.com
和同一时间子域应为
http://sub.example.com

访问它们的所有其他可能组合应重定向到上述2。到目前为止,我成功地做到了这一点,但在我使用
https://sub.example.com
。它不会重定向到http版本,而是尝试通过https加载页面,浏览器会抛出有关SSL的安全警告,如果我继续,它会通过子域加载主域站点的内容,并在浏览器上显示不安全警告

下面是我正在根目录上的htaccess上尝试的htaccess规则,它同时影响主站点和子域

如何改进它们并实现预期结果

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} sub\.example\.com [NC]
RewriteRule ^(.*)$ http://sub.example.com/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} sub\. [NC]
RewriteRule ^(.*)$ http://sub.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST} !sub\. [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} www\.sub\. [NC]
RewriteRule ^(.*)$ http://sub.example.com/$1 [R=301,L]

要仅将主域重定向到https,可以使用以下规则:

RewriteEngine on

#https to http (subdomain)
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^sub.example.com$
RewriteRule ^ http://sub.example.com%{REQUEST_URI} [NE,L,R]
 #main domain

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(example\.com)$
RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R]