目标:
- 将任何带有或不带有WWW的HTTP请求重定向到https_WWW.domain.com上的匹配页面,但包含子域.domain.com的请求不受影响
(我用下划线代替://因为我的帖子被检测为垃圾邮件,否则)
示例:
- http_domain.com>https_www.domain.com
- http_domain.com**https_www.domain.com*
- http_www.domain.com>https_www.domain.com
-
http_www.domain.com*>https_ww.domain.com/anything
-
http_subdomain.domain.com>http_subdomain.domain.com
- http_subdomain.domain.com*
- https_subdomain.domain.com>http_subdomain.domain.com
- https_subdomain.domain.com*>http_subdomain.domain.com*
我原以为以下方法可以做到,但没有奏效:
//将http_domain.com或http_www.domain.com的任何请求重定向到https_www.domain.com
//条件3应排除subdomain.domain.com受到重写规则的影响
rewriteengine on
rewritecond %{HTTPS} off
rewritecond %{HTTP_HOST} ^domain.com$
rewritecond %{HTTP_HOST} !^subdomain.domain.com$ [NC]
rewriterule ^(.*)$ https://www.domain.com/$1 [R=301,L]
知道为什么这不能实现我的目标吗?
您可以使用以下规则:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^admin.domain.com$
RewriteCond www.%{HTTP_HOST} ^(?:www.)?(www..+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R]
第一行检查方案是否为http(https==off)
第二行从https重定向(host=!"admin.domain.com")中排除子域
第三行匹配主机值www.domain.com或domain.com并自动将www添加到非www中,因此我们的%1始终包含www.domain.com。