在.htaccess或httpd.conf

时间:2017-08-26 10:37:42

标签: apache .htaccess

我无法以正确的顺序获取重写流程,以强制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,我也可以这样做。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以在httpd.confvhost.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]