我无法以正确的顺序获取重写流程,以强制HTTPS 和默认重定向到'www'域。
我想要做的是强制使用'www'域,如果没有提供,同时强制使用HTTPS,同时考虑到还有另外两个需要HTTPS的子域。
方案:
http://[domain.com]/* -> https://www.[domain.com]/*
http://assets.[domain.com]/* -> https://assets.[domain.com]/*
http://payloads.[domain.com]/* -> https://payloads.[domain.com]/*
据我了解,此第一个块检查HTTPS是否未启用以及是否存在子域名,然后将重定向到https://www.[domain.com]/
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\.|assets\.|payloads\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
虽然这会检查HTTPS是否未启用且找到了正确的子域,但重定向到https://[subdomain].[domain.com]/
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.|assets\.|payloads\. [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
虽然第一个条件/规则集成功重定向到默认的www子域,但它进入循环并且在转到https://www.[domain.com]时没有显示任何内容。
有人可以解释我的逻辑有什么问题吗?我在这里看了其他答案,要么他们没有帮助,要么没有答案。
如果在httpd.conf中强制使用HTTPS更合适,并将重定向保留到.htaccess,我也可以这样做。
提前致谢。
答案 0 :(得分:2)
您可以在httpd.conf
或vhost.cong
或网站根目录中完成这两项规则.htaccess:
RewriteEngine On
# for assets or payload subdomains
RewriteCond %{HTTP_HOST} ^(?:assets|payloads)\. [NC]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
# for rest
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]