Codeigniter重定向()函数行为错误


Codeigniter redirect() function behaves wrong

我在windows上的wampserver上使用codeigniter框架开发了一个基本应用程序。在我将应用程序上传到远程服务器(一台linux机器)上后,我不得不更改许多配置,以使应用程序在服务器上运行。其中大多数是由于错误的路由规则考虑和PHP版本兼容性(比如使用__DIR__常量,这在低于5.3的PHP版本中是不可用的)

如果我还没有登录,控制器会使用redirect()功能重定向到users/login路由。

但是,当我想访问windows机器(localhost)上的应用程序时,我遇到了一个奇怪的问题,控制器重定向到应用程序的远程版本(www.remote.com/users/login而不是localhost/users/login)。我已经检查了config/routes.php文件、config/config.php$config['base_url']的值,没有任何指向远程站点的内容。

更新:这是控制器的构造函数,如果用户还没有登录,它会将用户重定向到登录页面:

public function __construct() {
    if(!isset($this->session->userdata["logged_in"]) || !$this->session->userdata["logged_in"]) {
        redirect("/users/login");
        exit();
    }
}

这是登录的路径:

$route['users/login'] = 'users/login';

以及base_url:的配置

$config['base_url'] = 'http://www.portal.com:8000/';

有人能帮我找出问题吗?

您能展示更多的代码吗?一定有东西指向你的远程服务器,甚至可能是你在某个地方俯瞰的一行。以前发生在我身上。

更新

尝试从redirect("/users/login");中删除"/",这样它将是

redirect("users/login");

尝试从base_url中删除字符串,这样它就会显示为:

$config['base_url'] = '';

代码点火器应自动拾取base_url

在配置文件中设置base_url,如下所示:

$baseUrl=(isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!='关闭)https://':'http://';$baseUrl=isset($_SERVER['HTTP_HOST'])$_SERVER['HTTP_HOST']:getenv('HTTP_HOST');$baseUrl=isset($_SERVER['SCRIPT_NAME'])?dirname($_SERVER['SCRIPT_NAME']):dirname(getenv('SCRIPT_NAME'));$config['base_url']=$baseUrl;

这个baseurl既适用于localhost&远程服务器。

然后使用

重定向("users/login")
而不更改任何路线。

使用完整路径进行重定向,如下所示:

redirect($this->config->base_url()."/users/login");

您还可以使用动态$config['base_url']将config.php中的localhost替换为以下代码

$config['host_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['host_url'] .= "://".$_SERVER['HTTP_HOST'];
$config['base_url'] = $config['host_url'] . str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);