我继承的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行之间。
答案 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_url
(documented here)的任何/所有调用。它接受一个可选的第二个参数(字符串),用于定义要使用的协议 - ' http'或者' https'。
在源代码中搜索对辅助函数redirect
(Documented here)的调用。可能是在第一个参数(URI字符串)中指定协议。
如果您仍未找到它,请搜索源代码" http"也许你会发现以其他方式强迫你的协议。
首先要检查的文件集是位于application/controllers
然后尝试application/libraries
然后application/models
然后application/views
的文件。最后一次是不太可能的。如果这些application/
子目录列表中的任何一个都没有找到你想要的工作