我知道在这里提供了无数的.htaccess
解决方案,但没有一个重定向到https
只有主域的www
,但是没有https
仅用于子域的www
。基于this问题和php
的解决方案,现在我想修改我的.htaccess
文件以满足以下需求。
主域名:
http
重定向到https
non-www
重定向到www
www
是理想的,应该出现)子域:
http
重定向到https
www
重定向到non-www
www
不是理想的,不应该出现)我目前的方法看起来像这样:
RewriteEngine on
# Ensure https for all domains (main- and subdomains):
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Redirect non-www to www only for main domain, but not for subdomains:
RewriteCond %{HTTP_HOST} ^(domain\.com)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
# Redirect www to non-www only for subdomains:
RewriteCond %{HTTP_HOST} ^(www\.)?subdomain\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://subdomain.domain.com%{REQUEST_URI} [R=301,L,NE]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
部分:当没有https
进入子域时,此命令是否将访问者发送到主域?或者{HTTP_HOST}
是否已经包含可能的子域名?注释:子域的内容与主域完全不同(例如,可以是private.website.com或cloud.website.com)。它不仅仅是一种不同的语言。因此,通过浏览器源或CMS创建内部转发似乎没有用。它应该只通过.htaccess
-entry执行。
对于子域部分,该规则是重复的,您应该修改为:
RewriteCond %{HTTP_HOST} ^www\.subdomain\.domain\.com$ [NC]
RewriteRule ^ https://subdomain.domain.com%{REQUEST_URI} [R=301,L,NE]
对于这些规则:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
第1行:如果https关闭
第2行:对于任何模式,将用户永久重定向到https://%{HTTP_HOST}%{REQUEST_URI}
。 %{HTTP_HOST}
是从HTTP request header获得的,当用户提出请求domain.com
时,%{HTTP_HOST}
是domain.com
,而这个请求subdomain.domain.com
,%{HTTP_HOST}
然后是subdomain.domain.com