Индексный метод Codeigniter 3 ведет себя неожиданно - PullRequest
7 голосов
/ 07 мая 2019

У меня есть проект CodeIgniter на поддомене.Теперь, когда я захожу на sub.example.com, он загружает login page и при успешном входе в систему он перенаправляет на панель управления.После входа в систему и начала сеанса посещение sub.example.com/login/ автоматически перенаправит на dashboard page.Теперь вот моя проблема.После успешного входа в систему, посещение sub.example.com никуда не перенаправляет, а просто загружает страницу входа.Но посещение sub.example.com/index.php перенаправляет меня на страницу панели инструментов.

По какой-то причине мой индексный метод вызывается или работает правильно.

Вот мой код.

.htaccess

IndexIgnore *
php_value date.timezone Asia/Kolkata

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]


## Remove www from URL
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ https://sub.example.com/$1 [R=301,L]

## Redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^sub.example.com$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

config.php

if ($_SERVER['REMOTE_ADDR'] == "127.0.0.1") {
    $config['base_url'] = "http://" . $_SERVER['SERVER_NAME'];
} else {
    $config['base_url'] = "https://" . $_SERVER['SERVER_NAME'];
}

rout.php

$route['default_controller'] = 'root';
$route['root_controller'] = 'root';

/*API CONTROLLER*/
$route['api_controller'] = 'api';

/*Guest Controller*/
$route['guest_controller'] = 'guest';

/*Custom Routes*/

$route['dashboard/(:any)'] = 'root/dashboard/$1';

$route['search/(:any)'] = 'root/search/$1';
$route['search/(:any)/(:num)'] = 'root/search/$1/$2';

$route['export/(:any)'] = 'root/export/$1';

корневой контроллер

public function __construct()
    {
        parent::__construct();
        $this->default_data = array("project_name" => PROJECT_NAME);
        if ($this->router->method == "privacy_policy") {
            return;
        }

        $this->load->library('session');

        if ($this->router->method == "login") {
            if ($this->session->userdata("username")) {
                redirect(base_url("dashboard/"));
            }
        } else {
            if (!$this->session->userdata("username")) {
                redirect(base_url("login/"));
            }
        }

        //Set MYSQL timezone
        $this->db->query("SET time_zone = '+05:30'");
    }

    /**
     * Dashboard View
     */
    public function index()
    {
        redirect(base_url("/dashboard/"));
    }

    /**
     * Login View
     */
    public function login()
    {
        $data = $this->default_data;
        if ($_POST) {
            $username = $this->input->post("username");
            $plain_password = $this->input->post("password");
            $this->load->model("authenticate");
            if (!$this->authenticate->auth($username, $plain_password)) {
                $data['message'] = "Invalid Credentials";
            }
        }
        $this->load->view('login', $data);
    }

Обновление

  1. Забыл упомянуть, что эта проблема возникает только на удаленном сервере.На localhost работает нормально.

Ответы [ 5 ]

5 голосов
/ 13 мая 2019

Это идея - добавьте ее после загрузки объекта сеанса:

    if ($this->session->userdata("username") && $this->router->method == "index") {
            redirect(base_url("dashboard/"));
    }
2 голосов
/ 15 мая 2019

, если вы успешно посещаете sub.example.com/index.php, попробуйте это

public function login()
{
    $data = $this->default_data;
    if ($_POST) {
        $username = $this->input->post("username");
        $plain_password = $this->input->post("password");
        $this->load->model("authenticate");
        if (!$this->authenticate->auth($username, $plain_password)) {
            $data['message'] = "Invalid Credentials";
        }else{
            //go to dashboard function
            $this->index();
        }
    }
    $this->load->view('login', $data);
}
2 голосов
/ 15 мая 2019

Пожалуйста, используйте это .htaccess

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/system.* 
RewriteRule ^(.*)$ index.php?/$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?/$1 [L]

0 голосов
/ 15 мая 2019

«Оказалось, что были некоторые проблемы с файлами на удаленном сервере. Я точно не знаю, были ли файлы другими или повреждены, но замена всего проекта на удаленном сервере устранила проблему» -

@ Akash Вы должны сравнить свои локальные и удаленные файлы .htaccess. Я думаю, что это объяснит вашу проблему.

0 голосов
/ 13 мая 2019

Оказывается, возникла проблема с файлами на удаленном сервере.Я точно не знаю, были ли файлы другими или повреждены, но замена всего проекта на удаленном сервере устранила проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...