【问题标题】:CakePHP - Selective SSLCakePHP - 选择性 SSL
【发布时间】:2011-12-29 01:41:33
【问题描述】:

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

【问题讨论】:

标签: php .htaccess cakephp mod-rewrite ssl


【解决方案1】:

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

if( $_SERVER['SERVER_PORT'] == 80) {           
header('Location:https://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/'.basename($_SERVER['PHP_SELF'])); 
die();
}

这个 sn-p 将在您正在查看的任何页面上强制 https。如果要隔离某些页面,只需根据“$_SERVER['PHP_SELF']”变量中的信息设置一些条件即可。

否则,请修改 .htaccess 文件,假设您的主机允许您访问此文件:

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

【讨论】:

    【解决方案2】:

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

    1. 我将 apache 设置为将 SSL 和非 SSL 流量指向同一个目录。
    2. 然后我在配置中创建了一个数组,列出了哪些控制器需要使用 SSL(注册、登录等)
    3. 然后在自动加载的帮助程序中创建了一个函数,该函数检查当前控制器是否在该数组中,然后它将使用https:// 而不是http:// 重置base_url。如果控制器不在数组中,它将强制 base_urlhttp://

    对我来说完美无缺。如果我的 CodeIgniter 项目中的代码示例有帮助,请告诉我。

    Similar post that may help.

    【讨论】:

      【解决方案3】:

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

      isSsl函数here的book信息

      【讨论】:

        【解决方案4】:

        更好的解决方案可能是使用带有 htaccess 的 mod_rewrite 对某些 Url 执行此操作,并将代码放在一起。

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

        以下是有关如何为整个网站执行此操作的指南:

        http://www.besthostratings.com/articles/force-ssl-htaccess.html

        【讨论】:

          猜你喜欢
          • 2012-04-20
          • 1970-01-01
          • 1970-01-01
          • 2011-10-26
          • 1970-01-01
          • 2011-10-10
          • 2013-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多