【发布时间】:2023-03-29 01:01:01
【问题描述】:
我继承的 Codeigniter 应用程序有一个 302 重定向,将其从 https url 中移除。如果直接访问 http url,则不会发生重定向。我的问题是,“这个重定向可能发生在哪里?
如果我将脚本执行分解为调用的特定控制器的构造函数,我可以登陆 https 站点。在 index 函数中执行相同的操作将返回 http 站点。
我决定尝试在重定向之前跳过“退出”并简单地回显某些内容,以查看错误指向的位置,并将我引向 url 帮助程序,重定向功能。我不知道那个辅助方法是从哪里调用的。
使用 .htaccess 强制使用 ssl 会导致重定向循环,因此我必须先解决此重定向问题。
虽然下面的示例是登录控制器,但无论调用哪个控制器都会出现问题。
登录控制器:
class login extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('mod_login');
$this->load->helper('date');
echo "You are here.";// **This is the last place I can cut execution and land on an https site.
exit;
}
function index() {
}
}
我们将不胜感激任何关于在哪里寻找的帮助。
编辑:
我找到了重定向的位置。在搜索所有配置文件时,我发现了一个设置 $config['enable_hooks'] = true 的位置。当我找到 hooks 文件夹时,有一个 ssl_helper,它有两种方法:force_ssl 和 unforce_ssl。我仍然需要研究 codeigniter 钩子,但是注释掉 unforce_ssl 方法中的代码同时修复了所有问题,同时我试图弄清楚我的前任为什么这样做,以及禁用它的正确方法是什么。
编辑 2017 年 4 月 5 日 感谢 DFriend 花时间研究这个问题。 如果在这个特定的地方发生了中断,在控制器构造之后和控制器方法之前,那么问题出在钩子上。这可以在第 312 行和第 322 行之间的“system/core/Codeigniter.php”中找到。
【问题讨论】:
-
exit;是您的电话还是在那儿? -
我的。我把它放在我的调试尝试中。那是我可以退出脚本并仍然登陆 https 站点的最后一个地方。
-
好的,很好。不确定我是否理解您的问题。让我们来看看。您浏览到
https://examle.com,但最终访问http://example.com。对吗? -
没错。这对于 Codeigniter 的一些内部工作来说是特别的,它是一个 php mvc 框架。如果您熟悉 Codeigniter,您可能希望告诉我要查看哪个文件。如果您对 Codeigniter 不是很熟悉,就不可能有太多帮助。
标签: php codeigniter redirect