.htaccess强制ssl时不www

时间:2010-06-04 19:31:05

标签: apache .htaccess ssl redirect

我有一个网站,当访问一个主要托管实际应用程序的子域时使用ssl,而前端站点出现在www,我不想使用ssl。所以这将允许:

http://www.domain.com

但如果有人输入:

http://secure.domain.com

他们被迫:

https://secure.domain.com

使用此子域时不允许任何非ssl流量。

目前我的.htaccess文件中有这个:

RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

RewriteCond "%{HTTP_HOST}" !^www.* [NC]
RewriteCond "%{HTTP_HOST}" ^([^\.]+).*$
RewriteRule ^(.*)$ https://secure.domain.com/a/login/%1 [R=301,L]

这样可以正常工作,但如果我编辑URI以从https中删除s,它仍会加载页面但没有ssl。

如果我添加:

SSLOptions +StrictRequire
SSLRequireSSL

到.htaccess文件的顶部然后它总是强制流量到ssl,但这适用于所有子域,包括www。

有没有办法只捕获非www流量并强制使用ssl?

修改

澄清:

例如,如果你在:

https://secure.domain.com/a/login/test 

并编辑URI

http://secure.domain.com/a/login/test 

然后它仍然加载页面但不使用ssl。但是,如果我使用

SSLRequireSSL 

然后它强制要求整个网站,我不想在

使用ssl
http://www.domain.com

1 个答案:

答案 0 :(得分:2)

<强>解决

经过一些调整后,我现在已经解决了这个问题。我所做的是编辑应用程序所在子目录中的.htaccess文件:https://secure.domain.com/ a / login / test并将其设置为检测是否正在使用ssl(I应该添加.htaccess文件的其余部分是为了CodeIgniter的利益):

RewriteEngine on

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

RewriteCond %{HTTPS} on
RewriteCond $1 !^(index\.php|images|includes|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]