Codeigniter redirect()函数表现错误

时间:2013-11-25 10:39:42

标签: php codeigniter

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

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

但是当我想在我的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/';

任何人都可以帮我找出问题吗?

3 个答案:

答案 0 :(得分:1)

您能否展示更多代码? 必须有指向您的远程服务器的东西,它甚至可能是您正在某处忽略的一条线。之前发生在我身上。

<强>更新

尝试从"/"删除redirect("/users/login");,然后将

redirect("users/login");

尝试从base_url中删除字符串,因此会显示:

$config['base_url'] = '';

codeigniter应该自动获取base_url

答案 1 :(得分:1)

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

$baseUrl = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? '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;

这个base_url同时适用于localhost&amp;远程服务器。

然后使用

redirect("users/login");
而不更改任何路线。

答案 2 :(得分:1)

使用完整路径重定向:

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']);