CakePHP-选择性SSL

CakePHP-选择性SSL,php,.htaccess,cakephp,mod-rewrite,ssl,Php,.htaccess,Cakephp,Mod Rewrite,Ssl,如何对站点的某些部分强制使用HTTPS,例如登录页面或注册页面,并对站点的其余部分使用HTTP?我对CodeIgniter做了同样的事情。我并不完全熟悉CakePHP,但我确信过程是类似的 我将apache设置为将SSL和非SSL通信指向同一目录 然后我在配置中创建了一个数组,列出了哪些控制器需要SSL(注册、登录等) 然后在自动加载的帮助程序中创建一个函数,检查当前控制器是否在该数组中,然后它将使用https://而不是http://重置base\u url。如果控制器不在数组中,它将强制ba

如何对站点的某些部分强制使用HTTPS,例如登录页面或注册页面,并对站点的其余部分使用HTTP?

我对CodeIgniter做了同样的事情。我并不完全熟悉CakePHP,但我确信过程是类似的

  • 我将apache设置为将SSL和非SSL通信指向同一目录
  • 然后我在配置中创建了一个数组,列出了哪些控制器需要SSL(注册、登录等)
  • 然后在自动加载的帮助程序中创建一个函数,检查当前控制器是否在该数组中,然后它将使用
    https://
    而不是
    http://
    重置
    base\u url
    。如果控制器不在数组中,它将强制
    base\u url
    http://
  • 对我来说工作完美无瑕。让我知道我的CodeIgniter项目中的代码示例是否有帮助


    您可以加载RequestHandler组件,并使用isSsl()函数确定它是否来自http或https,如果!isSsl然后将其重定向到https页面:)否则,您可以做任何其他您想做的事情


    isSsl函数的图书信息

    更好的解决方案可能是使用htaccess对某些Url进行mod_重写,并将代码全部删除

    您可以为某些Url设置重写规则

    以下是如何为整个站点执行此操作的线索:


    我最喜欢的转换为https强制方法是将此作为php脚本中的第一件事。它在Joomla中工作,在CakePHP中也可以很好地工作

    if( $_SERVER['SERVER_PORT'] == 80) {           
    header('Location:https://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/'.basename($_SERVER['PHP_SELF'])); 
    die();
    }
    
    此代码段将在您正在查看的任何页面上强制使用https。如果要隔离certian页面,只需根据“$\u SERVER['PHP\u SELF']”变量中的信息设置一些条件

    否则,请修改.htaccess文件,前提是您的主机允许您访问:

    RewriteEngine On 
    RewriteCond %{SERVER_PORT} 80 
    RewriteCond %{REQUEST_URI} somefolder 
    RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]
    
    可能重复的