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