1

我想为所有页面实现 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]
4

1 回答 1

2

最后,我选择的解决方案是:

  • 删除 /app/webroot/.htaccess 和 /app/.htaccess

  • 将 /.htaccess 修改为

.htaccess --->

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
  • 在 Cake 中禁用 URL 重写

核心.php --->

Configure::write('App.baseUrl', env('SCRIPT_NAME'));



现在访问是通过hxxps://www.mysite.com/index.php/controller/action

于 2013-04-15T21:46:07.917 回答