2014-07-06 47 views
0

我刚刚添加了以下规则来强制HTTPS在我的付款页面上,只是因为我不知道如何强制HTTPS只在domain.com而不是user1.domain.com - 不太确定如何做到这一点,或者即使有可能。htaccess - 如何强制HTTPS只是我的主域名,而不是子域

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} /join/payment 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] 

所以我补充说,规则和它的正常工作,但是,它可能只是强制HTTPS在我的完整域名,而不是我的任何的子域?

我的全htaccess文件

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|js|profile_pictures|fonts|stylesheets|robots\.txt) 

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} /join/payment 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [NE,R=301,L] 

RewriteCond %{HTTP_HOST} !^((www\.)?)domain\.com [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com 
RewriteRule ^(.*)$ http://domain.com/site/%1$1 [L,NC,P] 

RewriteCond %{HTTP_HOST} !^domain\.com$ [NC] 
RewriteRule ^((?!site/).*)$ http://domain.com/site/$1?host=%{HTTP_HOST}&page=%{REQUEST_URI} [L,NC,P] 

问题

是否有可能只是强制HTTPS上domain.com而不是子域?如果可以在子域上强制使用HTTP而不是HTTPS,我很想听听如何做到这一点。

+0

在重定向到HTTPS之前,只需添加另一个'RewriteCond'来检查主机名称 - 类似于您已经进一步重新定向到'domain.com'。 (顺便说一句,后者会将任何不是'www'的子域重定向到基本域,所以你实际上不能拥有那么多其他子域?) – CBroe

+0

所有的子域都是动态的,所以有超过100个子域。看起来,当我只在我的域上强制使用HTTPS时,它解开了子域。 – user2983512

+0

你能解释最后2条规则是用'P'标志做什么的 – anubhava

回答

0

我认为这应该工作:

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} /join/payment 
RewriteCond %{HTTP_HOST} !^((www\.)?)domain\.com [NC] 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] 

也就是说,添加一个条件,以检查HTTP_HOST是www.domain.comdomain.com在它前面加https://之前。

+0

这种作品,虽然当我输入时说'www.user1customdomain.com'被屏蔽,因为HOST实际上是我的域名,它添加了HTTPS和然后显示“该网站的身份未被验证。”有没有办法解决?除此之外,如果我访问“mydomain.com”,它不会添加HTTPS,因为没有www。 (这是我已经删除)。 – user2983512

+0

该解决方案应该可以在我们没有'www.'的情况下工作,这在用于重写条件的正则表达式中是可选的。 'www.user1customdomain.com'是一个完全不同的域,根本不应该匹配正则表达式,从而跳过重写。 – Diego

相关问题