我想为所有网页实施HTTPS。
我将CakePHP 2.3与“Auth”组件一起使用。
实际上,我找到的唯一方法是添加“beforeFilter-condition”。
但这非常脏,因为我有很多“非SSL”请求,因为Auth-Component。
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);
}
}
当我没有登录并且我尝试访问我的网站时出现问题
那么,你知道另一种方法吗?
注意:我必须在core.php中强制保护我的cookie,因为它们不是。
core.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]
答案 0 :(得分:2)
最后,我选择的解决方案是:
删除/app/webroot/.htaccess和/app/.htaccess
修改/.htaccess到
.htaccess ---&gt;
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
core.php ---&gt;
Configure::write('App.baseUrl', env('SCRIPT_NAME'));
现在可通过 hxxps://www.mysite.com/index.php/controller/action