我有一个网站,当访问一个主要托管实际应用程序的子域时使用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
然后它强制要求整个网站,我不想在
使用sslhttp://www.domain.com
答案 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]