在CodeIgniter中查找重定向调用的来源

时间:2017-04-04 19:09:21

标签: php codeigniter redirect

我继承的Codeigniter应用程序有302重定向,将其从https网址中删除。如果直接访问http网址,则不会发生重定向。我的问题是,"这种重定向可能在哪里发生?

如果我将脚本执行分解为所调用的特定控制器的构造函数,我可以登陆https站点。在索引函数中执行相同操作将返回http站点。

我决定尝试跳过"退出"并且在重定向之前简单地回显一些东西以查看错误指向的位置,并且它将我引用​​到url helper,redirect函数。我无法分辨调用辅助方法的位置。

使用.htaccess强制ssl会导致重定向循环,所以我必须先修复此重定向问题。

虽然以下示例是Login控制器,但无论调用哪个控制器,都会出现问题。

登录控制器:

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方法中的代码已经修复了所有内容,同时我试图弄清楚为什么我的前任这样做了,以及正确的禁用方法是什么。

编辑4-5-2017 感谢DFriend花时间研究这个问题。 如果在此特定位置发生中断,在控制器构造之后和控制器方法之前,那么问题在于钩子。这可以在" system / core / Codeigniter.php"中找到。在第312和322行之间。

1 个答案:

答案 0 :(得分:2)

第一个要查看的地方是application/config/config.php,其中有一个名为$config['base_url']的项目,它看起来就像这样。

$config['base_url'] = 'http://example.com/';

注意该字符串开头的协议。如果您总是想使用https,请相应地更改字符串。顺便说一句,字符串必须包含协议。

Codeigniter允许多个config.php个文件。如果此继承的应用程序正在使用它们,则它们将位于application/config/的子文件夹中。如果正在使用此选项,则子文件夹将命名为" production"和"开发"。可以想象,可能只有一个子文件夹。在它(他们)中,您可能会找到其他config.php个文件。还要检查这些$config['base_url']值。

要查找的另一件事是对辅助函数base_urldocumented here)的任何/所有调用。它接受一个可选的第二个参数(字符串),用于定义要使用的协议 - ' http'或者' https'。

在源代码中搜索对辅助函数redirectDocumented here)的调用。可能是在第一个参数(URI字符串)中指定协议。

如果您仍未找到它,请搜索源代码" http"也许你会发现以其他方式强迫你的协议。

首先要检查的文件集是位于application/controllers然后尝试application/libraries然后application/models然后application/views的文件。最后一次是不太可能的。如果这些application/子目录列表中的任何一个都没有找到你想要的工作

  1. 助手
  2. 包括
  3. 您可以找到的任何其他文件夹:)
  4. 祝你好运。它不应该太难。