.htaccess HTTP或HTTPS取决于子域级别

时间:2015-12-29 12:27:24

标签: apache .htaccess mod-rewrite url-rewriting ssl-certificate

我无法为无限级别的子域提供通配符SSL证书,我只有一个*.domain.tld通配符。所以我希望将HTTPS请求重新写入HTTP请求如果 %{HTTP_HOST}变量中存在多个子域级别。如果没有或有1个子域,则应将HTTP请求重写为HTTPS请求。

例如:

www.domain.tld       -> 1 subdomain(s) HTTPS
domain.tld           -> 0 subdomain(s) HTTPS
sub.domain.tld       -> 1 subdomain(s) HTTPS
two.sub.domains.tld  -> 2 subdomain(s) HTTP
a.b.c.domain.tld     -> 3 subdomain(s) HTTP

这是我能想到的唯一一个不会让我购买通配符证书的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用:

RewriteEngine on

# redirect http to https with 0 or 1 subdomain
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^([^.]+\.){1,2}[^.]+$ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301] 

# redirect https to http with 2 or more subdomains
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^([^.]+\.){3,}[^.]+$ [NC]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301] 

使用https到http重定向

无法避免SSL安全错误消息