CakePHP - 选择性SSL

时间:2011-11-18 12:15:38

标签: php .htaccess cakephp mod-rewrite ssl

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

4 个答案:

答案 0 :(得分: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();
}

此代码段会强制显示您正在查看的任何网页上的https。如果要隔离certian页面,只需根据“$ _SERVER ['PHP_SELF']”变量中的信息添加一些条件。

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

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

答案 1 :(得分:0)

我使用CodeIgniter做了一件事。我对CakePHP并不完全熟悉,但我确信这个过程很相似。

  1. 我设置了apache,将SSL和非SSL流量指向同一目录。
  2. 然后我在配置中创建了一个数组,列出了哪些控制器需要SSL(注册,登录等)
  3. 然后在自动加载的帮助器中创建了一个函数,该函数检查当前控制器是否在该数组中,然后它将使用base_url而不是https://重置http://。如果控制器不在数组中,则会强制base_urlhttp://
  4. 为我工作完美无缺。如果我的CodeIgniter项目中的代码示例有用,请告诉我。

    Similar post that may help.

答案 2 :(得分:0)

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

isSsl函数的书信息here

答案 3 :(得分:0)

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

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

以下是关于如何为整个网站执行此操作的主要内容:

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