.htaccess - 强制https除了子域名

时间:2015-02-13 04:18:13

标签: .htaccess internet-explorer subdomain

我目前正在使用:

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !=subdomain.domain.com
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

似乎可以通过https加载我的主页面,通过http加载我的子域名,但仅限IE浏览器。它在chrome或firefox中不起作用。

当我进行此设置时:

RewriteCond %{HTTPS} = off
RewriteCond %{HTTP_HOST} !=subdomain.domain.com
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

它拒绝加载我的子域名。

有人可以向我解释一下https = off和https!= on之间的区别是什么?我做错了什么阻止它在firefox和chrome中工作?

1 个答案:

答案 0 :(得分:0)

  

有人可以向我解释一下https = off和https!= on之间的区别是什么?我做错了什么阻止它在firefox和chrome中工作?

%{HTTPS} = off 错误。 Mod-rewrite在解析其规则方面并不是非常聪明,所以当它看到=off之间的空格时,它会认为off是重写条件标志,它会抛出一个错误,因为它不是有效标志。您并不真正需要=!=内容:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^subdomain\.domain\.com$ [NC]

足够好了,你的第一条规则也没问题。

RewriteCond %{HTTPS} !=on

RewriteCond %{HTTPS} !on

RewriteCond %{HTTPS} =off

RewriteCond %{HTTPS} off

都是一样的。

此处的问题不在于您的重写规则,而是您的服务器配置了SSL或某些浏览器设置(或者您需要清除缓存)。