Функция codeigniter redirect() ведет себя неправильно

Я разработал базовое приложение, использующее frameworkignign framework на wampserver в окнах. После того как я загрузил приложение на удаленном сервере, который является 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'], ничто не указывает на удаленный сайт.

UPDATE: это конструктор контроллера, который перенаправляет пользователя на страницу входа, если он уже не зарегистрирован:

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

и это маршрут для входа в систему:

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

и config для base_url:

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

Может ли кто-нибудь помочь мне разобраться с проблемой?

3 ответа

используйте полный путь для перенаправления следующим образом:

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

вы также можете использовать динамический $ config ['base_url'] заменить localhost в config.php на этот код

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


Не могли бы вы показать больше своего кода? Должно быть, что-то указывает на ваш удаленный сервер, это может быть даже одна строка, которую вы где-то просматриваете. Случилось раньше.

Обновить

Попробуйте удалить "/" из redirect("/users/login"); так что это было бы

redirect("users/login");

или попробуйте удалить строку из base_url, чтобы она читала:

$config['base_url'] = '';

codeigniter затем автоматически выбирает base_url


В вашем файле конфигурации установите 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, так и с удаленным сервером.

а затем использовать

redirect("users/login");
без изменения маршрута.

licensed under cc by-sa 3.0 with attribution.