我想为所有页面实现 HTTPS。
我使用带有“Auth”组件的 CakePHP 2.3。
实际上,我发现的唯一一种方法是添加“beforeFilter-condition”。
但这很脏,因为由于 Auth-Component,我有很多“非 SSL”请求。
AppController.php --->
class AppController extends Controller {
public function beforeFilter() {
if (env("SERVER_PORT") != "443") {
$this->Security->blackHoleCallback = 'forceSSL';
$this->Security->requireSecure();
}
}
public function forceSSL() {
$this->redirect('https://' . env('SERVER_NAME') . $this->here);
}
}
当我未登录并尝试访问我的网站时出现问题
- 请求 --> 响应(因为)
- GET hxxp://MYSITE/ --> 302 hxxp s ://MYSITE/ (beforeFilter-redirection)
- GET hxxp s ://MYSITE/ --> 302 hxxp://MYSITE/users/login (Auth 组件)
- GET hxxp://MYSITE/users/login --> 302 hxxp s ://MYSITE/users/login (beforeFilter-redirection)
- 获取 hxxp s ://MYSITE/users/login --> 200
- POST hxxp s ://MYSITE/users/login(带有凭据)--> 302 hxxp://MYSITE/(身份验证组件)
- 获取 hxxp://MYSITE/ --> 302 hxxp s ://MYSITE/
- 获取 hxxp s ://MYSITE/ --> 200
所以,你知道另一种方法吗?
注意:我不得不强制在 core.php 中保护我的 cookie,因为它们不是。
核心.php --->
Configure::write('Session', array(
'defaults' => 'php',
'ini' => array(
'session.cookie_secure' => true
)));
请注意,我还尝试通过修改 .htaccess 来强制使用 SSL,但我得到的只是无限循环。
编辑 :
CakePHP 中默认的 .htaccess 是
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
我试图添加的内容:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]