2014-10-20 98 views
0

我试图在我的网站上使用新的SSL设置/证书来运行.htaccess。它在部分工作,但似乎无法将我所追求的所有规则结合起来。用简单的英语,我正在寻找的行为是:.htaccess中的三个子句 - https和http,www和非www以及IE 6-8

  1. 如果浏览器是IE 6-8,请将用户发送到http。这包括 将所有https请求发送到http。另外,将所有非www 发送到www。基本上,如果它是IE 6-8,发送到http/www。
  2. 如果浏览器是其他任何东西,并且请求http,请发送到http://www.hp.com/。再次,发送所有非www到www。基本上 - 任何http请求= http/www服务
  3. 如果浏览器是其他任何和HTTPS请求,请发送到 https。再次,发送所有非www到www。基本上,任何HTTPS 请求= HTTPS/WWW服务

目前我有:

RewriteEngine on 

#Redirect all http MSIE 6-8 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_USER_AGENT} "MSIE [6-8]" [NC] 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#Redirect all https MSIE 6-8 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_USER_AGENT} "MSIE [6-8]" [NC] 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#Send http to http, non-www to www 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#Send https to https, non-www to www 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 

一切似乎是工作,除了在IE 6-8 HTTPS/WWW请求仍然被服务作为https。我错过了什么?!提前致谢!

回答

0

我从here发现括号似乎是必需的{HTTP_USER_AGENT}字符串,而不是我用以前的报价。我在前几条规则中也引入了一些否定。可能有一个更优雅的方式来实现最终结果,但下面的规则似乎适用于我。

RewriteEngine on 

#Send http to http, non-www to www, checking that USER_AGENT isn't IE 6-8 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_USER_AGENT} !(MSIE\ [6-8]) [NC] 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#Send https to https, non-www to www, checking that USER_AGENT isn't IE 6-8 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_USER_AGENT} !(MSIE\ [6-8]) [NC] 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 

#Redirect all http, MSIE 6-8, non-www to www 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_USER_AGENT} (MSIE\ [6-8]) [NC] 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#Redirect all https, MSIE 6-8, non-www to www 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_USER_AGENT} (MSIE\ [6-8]) [NC] 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#Redirect all https MSIE 6-8, www to www 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_USER_AGENT} (MSIE\ [6-8]) [NC] 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 
相关问题