我在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/';
任何人都可以帮我找出问题吗?
答案 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']);