Простая система входа с использованием CodeIgniter, возвращающая 404 при входе в систему

Я пытаюсь понять, как использовать PHP и использовать CodeIgniter Framework. Я недавно следил за этим уроком:

http://www.codefactorycr.com/login-with-codeigniterphp.html

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

Не найдено Запрошенный URL / LoginTut / login / VerifyLogin не найден на этом сервере.

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

Вот как я настроил свой CI

routes.php

$route['default_controller'] = "login";

config.php

$config['base_url'] = 'http://localhost/LoginTut/';

Я оставил этот пробел.

$config['index_page'] = '';

Я также гарантирую, что загружаю все соответствующие библиотеки и помощники.

autoload.php

$autoload['libraries'] = array('database', 'session'); $autoload['helper'] = array('url');

Ниже приведены все мои файлы PHP ..

user.php

 class User extends CI_Model{ function login($username, $password){ $this -> db -> select('id, username, password'); $this -> db -> from ('users'); $this -> db -> where ('username', $username); $this -> db -> where ('password', md5($password)); $this -> db -> limit(1); $query = $this -> db -> get(); if($query -> num_rows() == 1){ retrun $query->result(); } else{ return false; } } 

}

login_view.php

  <?php echo form_open('VerifyLogin'); ?> <label for="username">Username:</label> <input type="text" size="20" id="username" name="username"/> <br/> <label for="password">Password:</label> <input type="password" size="20" id="passowrd" name="password"/> <br/> <input type="submit" value="Login"/> </form> 

login.php

 class Login extends CI_Controller{ function _construct(){ parent::_construct(); } function index(){ $this->load->helper(array('form')); $this->load->view('login_view'); } } 

verify_login.php

 class VerifyLogin extends CI_Controller{ function _construct(){ parent::_construct(); $this->load->model('user', '', TRUE); } function index(){ $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); if($this->form_validation->run() == FALSE){ //Validation failed, user redirected to login page... $this->load->view('login_view'); } else{ //Login success. Go to members only area redirect('home', 'refresh'); } } function check_database($password){ //Field validation succeeded. Validate against db $username = $this->input->post('username'); //query db $result = $this->user->login($username, $password); if($result){ $sess_array = array(); foreach($result as $row){ $sess_array = array( 'id' => $row->id, 'username' => $row->username ); $this->session->set_userdata('logged_in', $sess_array); } return TRUE; } else{ $this->form_validation->set_message('check_database', 'Invalid username or password'); return false; } } 

}

Пользователь должен иметь возможность успешно войти в систему и завершить работу в контроллере home.php который загружает файл home_view.php .

Это действие отправки формы входа

 http://localhost/LoginTut/login/VerifyLogin 

Я был бы очень признателен за любую помощь, связанную с этой проблемой, я боролся с ней в течение нескольких дней, и это начинает действительно раздражать меня. У меня такое чувство. В моем коде есть что-то очень малое. У меня просто недостаточно знаний, чтобы понять это.

ПРИМЕЧАНИЕ. Я читал на форуме, что это может быть связано с проблемой .htaccess, но я не знаю, что это такое!

.htaccess файл

 <IfModule mod_rewrite.c> RewriteEngine On #Removes access to the system folder by users. #Additionally this will allow you to create a System.php controller, #previously this would not have been possible. #'system' can be replaced if you have renamed your system folder. RewriteCond %{REQUEST_URI} ^system.* RewriteRule ^(.*)$ index.php?/$1 [L] #When your application folder isn't in the system folder #This snippet prevents user access to the application folder #Submitted by: Fabdrol #Rename 'application' to your applications folder name. RewriteCond %{REQUEST_URI} ^LoginTut.* RewriteRule ^(.*)$ index.php?/$1 [L] #Checks to see if the user is attempting to access a valid file, #such as an image or css document, if this isn't true it sends the #request to index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?$1 [L] </IfModule> <IfModule !mod_rewrite.c> ErrorDocument 404 index.php </IfModule> 

Большое спасибо.

Я также ответил на ваш другой пост, но просто повторю:

Вы назвали ваш контроллер «verify_login.php», но ваш класс называется «VerifyLogin». В Codeigniter ваш класс должен быть назван так же, как ваш файл, просто заглавными буквами. Чтобы эта страница работала правильно, вы должны либо переименовать свой файл контроллера в «verifyLogin.php», либо переименовать свой класс в «Verify_Login».

Отключите перезапись на некоторое время. Сначала исправьте это с помощью обычных URL-адресов CodeIgniter:

URL-адреса CodeIgniter работают следующим образом:

 <base_url>/<index-page>/<controller>/<methodOfController>/<parameters> 

Когда вы запросили .../login/VerifyLogin , которые не будут работать, так как логин и VerifyLogin являются контроллерами. CodeIgniter будет «думать», что вы хотите вызвать метод VerifyLogin () в логике контроллера. Вы должны вместо этого позвонить .../VerifyLogin/index .

Вы оставили $config['index_page'] пустым. В CodeIgniter вы не можете напрямую обращаться к методам на контроллерах; вы действительно позволите CodeIgniter сделать это за вас. Это означает, что CodeIgniter должен выполнить сначала, а затем проанализировать URL-адрес и делегировать запрос правильному контроллеру и методу. Это то, что нужно для конфигурации * index_page * – для запуска CodeIgniter. Вы должны выполнить все запросы через этот файл.

В CodeIgniter включен index.php (он заканчивается строкой require_once BASEPATH.'core/CodeIgniter.php'; ). Используйте это как index_page.

Когда вы это сделаете, ваш полный URL-адрес будет следующим:

 http://localhost/LoginTut/index.php/VerifyLogin/index/<parameters>