【发布时间】:2011-12-29 01:41:33
【问题描述】:
如何为网站的某些部分强制使用 HTTPS,例如登录页面或注册页面,并为网站的其余部分使用 HTTP?
【问题讨论】:
标签: php .htaccess cakephp mod-rewrite ssl
如何为网站的某些部分强制使用 HTTPS,例如登录页面或注册页面,并为网站的其余部分使用 HTTP?
【问题讨论】:
标签: php .htaccess cakephp mod-rewrite ssl
我最喜欢的转换为 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]
【讨论】:
我用 CodeIgniter 做了同样的事情。我对 CakePHP 并不完全熟悉,但我确信这个过程是相似的。
https:// 而不是http:// 重置base_url。如果控制器不在数组中,它将强制 base_url 到 http://。对我来说完美无缺。如果我的 CodeIgniter 项目中的代码示例有帮助,请告诉我。
【讨论】:
您可以加载 RequestHandler 组件并使用 isSsl() 函数来确定它是来自 http 还是 https,如果 !isSsl 然后将其重定向到 https 页面:) 否则做任何你想做的事情。
isSsl函数here的book信息
【讨论】:
更好的解决方案可能是使用带有 htaccess 的 mod_rewrite 对某些 Url 执行此操作,并将代码放在一起。
您可以为某些 Url 设置重写规则。
以下是有关如何为整个网站执行此操作的指南:
http://www.besthostratings.com/articles/force-ssl-htaccess.html
【讨论】: