Я новичок в CodeIgniter и маршрутизации.
У меня есть контроллер Login
которого index()
загружает представление, чтобы ввести имя пользователя / пароль. В представлении форма имеет action="login/authenticate"
. Login-> authenticate () определяет, является ли логин действительным или нет. Если это допустимо, redirect('lobby')
, если не redirect('login')
routes.php:
$route['default_controller'] = "login"
config.php:
$config['base_url'] = "http://localhost/dts/"; $config['index_page'] = "index.php";
Проблема в том, что когда я перехожу к http://localhost/dts/
, нажмите login, я правильно (?) Перенаправлен на http://localhost/dts/login/authenticate
но браузер говорит, что Object not found!
, Но когда я перехожу к http://localhost/dts/index.php/
(с завершающим косой чертой), он работает правильно (я перенаправляюсь на http://localhost/dts/index.php/login/authenticate
и записывается в журнал в)
Я попытался удалить «index.php» с помощью .htaccess:
RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L]
и он больше не будет открывать даже http: // localhost / dts /
Я в замешательстве. Что происходит?
Проблема связана с последней строкой вашего файла .htaccess.
Поскольку ваше приложение находится в подкаталоге («dts»), передняя косая черта перед «index.php» не будет работать. Попробуйте удалить его, чтобы ваш файл выглядел так:
RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ index.php/$1 [L]
Следуйте этой статье в вики CodeIgniter, чтобы правильно настроить свой .htaccess
следующим образом:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #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} ^application.* 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> # If we don't have mod_rewrite installed, all 404's # can be sent to index.php, and everything works as normal. # Submitted by: ElliotHaughin ErrorDocument 404 /index.php </IfModule>
Вы изменили это в своей конфигурации:
$config['index_page'] = "index.php";
К этому:
$config['index_page'] = "";
Кроме того, прочитайте это сообщение от Jamie Rumbelow:
http://jamieonsoftware.com/blog/entry/the-best-codeigniter-.htaccess
Thats .htaccess, который я всегда использовал, и он отлично работает для меня.