I am trying to get rid of the 404 Page not found error while updating to Codeigniter 3.0
I am using Ion Auth and HMVC libraries. I have fixed Ion Auth issue and I believe (not so sure) that I have fixed HMVC issues as well. If not than don't know how to debug ^_^ it. But I have updated both libraries with the latest one from their respective repos.
I have logged in successfully but when system try to loads the first page after login it is giving 404 error and here are the logs
DEBUG - 2015-03-17 10:51:51 --> UTF-8 Support Enabled
DEBUG - 2015-03-17 10:51:51 --> Global POST, GET and COOKIE data sanitized
ERROR - 2015-03-17 10:51:51 --> 404 Page Not Found: ../modules/admin/controllers/dashboard//index
Notice: double slash in URI before last segment (index). Isn't it strange?
I wonder what is wrong here. I have tried uri_protocol by setting AUTO and REQUEST_URI too but none of them worked.
$config['uri_protocol'] = 'AUTO';
and
$config['uri_protocol'] = 'REQUEST_URI';
Now, I my development completely stuck. Can anyone help me to rid of this issue? Thanks a lot...!
Routes info
application/config/routes.php
$route['default_controller'] = "users/login";
$route['404_override'] = '';
application/modules/users/config/routes.php This is for Ion Auth
$route['users/(:any)'] = "auth/$1";
I have fixed my 404 redirect issue by capitalizing all my class file names in the controller folder and model folder.
So instead of main.php I did Main.php.
Hope this helps someone moving from CI 2 to CI 3.0
Capitalize all your controllers and models files.
Ex:
- controllers/Ajax.php
class Ajax extends MX_Controller {
... some magic stuff
}
Related
I'm using CodeIgniter with Nginx.
I have just upgraded from CodeIgniter 2.2.6 to 3.1.4, following all the changelogs and upgrade instruction. Everything works perfectly but the default controller, i.e. http://francescoruvolo.it (or even http://francescoruvolo.it/index.php) shows a 404 page but all other routing rules works and I'm able to load the other controllers.
Here is my routes.php:
$route['(it|en)/contact/check_form'] = "Email/validate_form/$1";
$route['(it|en)/contact'] = "Email/show_form/$1";
$route['(it|en)/(:any)'] = "Pages/show/$1/$2";
$route['(it|en)'] = "Pages/show/$1";
$route['default_controller'] = "Pages/show/";
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
I have also tried to comment all routes, but still the default one is ignored. Still, if I go http://francescoruvolo.it/Pages/show or either http://francescoruvolo.it/en, controllers are loaded just fine and it works. Many people had similar problems because they missed the part about enforcing the capitalized name for classes, but this is not the case as my controllers' name have been already fixed.
These are the parameters in config.php:
$config['base_url'] = 'http://francescoruvolo.it/';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
And Nginx looks like it is properly forwarding all requests to index.php, in fact I don't need to specify it when loading controllers explicitly. Anyway, these lines are part of my Nginx configuration for the host:
location / {
try_files $uri $uri/ /index.php;
}
What I don't get is that I'm actually able to get two different kind of 404 pages. For example, if I go to http://francescoruvolo.it/nonexistent.php Nginx correctly serves me a 404 page. At the same time, if I do not specify any path or explicitly specify index.php I get a 404 "well formatted", which means that the index.php from CodeIgniter has been actually run, but it failed to load the controller.
What am I missing? What else can I check?
Solved. Apparently, I had an extra (unneeded) / at the end of my default route.
This was WRONG:
$route['default_controller'] = "Pages/show/";
This is CORRECT:
$route['default_controller'] = "Pages/show";
Still, I don't quite get why. In fact, if I explicitly load the controller, it works even with the extra slash.
If anyone explains this, I'll gladly accept his answer. :)
I've got a Codeigniter 3 site where all my routes work except my home page route, which is like so:
<?php
$route['default_controller'] = "front/homepage";
?>
If I create a new route as below I can access it as "/home" but nothing works for index. I get an error in my log as 404 Page Not Found: /index, in my config i have index set to blank.
<?php
$route['home'] = "front/homepage";
?>
Any ideas?
Thanks
This is no-longer supported in Codeigniter since V2 due to it being a bug in the routing logic.
http://www.codeigniter.com/userguide3/installation/upgrade_300.html#directories-and-default-controller-404-override
I try almost everything for fixed my problem but I can't
This is my routes file in codeigniter.
$route['default_controller'] = "main";
$route['404_override'] = 'my_error_page';
$route['(:any)'] = 'page/index/$1/';
My website working well normally but 404_override not redirect to my_error_page.
I see standart codeigniter 404 page like the picture
When I delete last line like following;
$route['default_controller'] = "main";
$route['404_override'] = 'my_error_page';
404_override redirect to my error page and of course web site not running well.
It is maybe a simple problem but I am confused.
Sorry bad english.
Please help.
Thaank you.
I am very new to CodeIgniter Ion Auth, I was wondering if it is possible to add pages, outside the auth folder? the pages can be accessed only if the user is logged in. The main reason why I wanted the pages outside the auth folder is that I want to get rid of the "auth" in the url. Any help would be greatly appreciated. By the way, I only tried adding pages inside the auth folder. Thanks!
The short answer is Yes, you can. But if the reason is simply to remove the "auth" in the URL, the easiest way to achieve this is by using routes settings (located in the \application\config\routes.php file)
For example, if you set;
$route['login'] = 'auth/login';
The URL to the log in page will be;
http://yourdomain.com/index.php/login
You can go a step further by adding URL suffix in codeigniter config settings ( \application\config\config.php)
$config['url_suffix'] = '.html';
so that the URL to the log in page will be;
http://yourdomain.com/index.php/login.html
You can even remove the /index.php part of the URL. See this forum here
Regarding codeigniter routes.php :
We have following entry in C:\wamp\www\application\config\routes.php
$route['default_controller'] = 'latestC';
$route['404_override'] = 'latestC';
and latestC is our default controller. Here default_controller is not working in production. If we remove line $route['404_override'] = 'latestC'; from routes.php, we are not able to reach to home page while hitting main url mozvo.com and its a 404. Basically 404_override is doing job for us instead of default_controller for taking to homepage on hitting mozvo.com. Requests are routing to home page by 404_override controller.
But in localhost, it works perfectly. In localhost if we remove 404_controller, default_controller takes care of main url (mozvo.com, here localhost ) and others non supported urls are 404 which is correct. But in production default_controller is not taking to homepage(mozvo.com) properly so we are forced to use 404_override to take default request to homepage.
Additional Info - Entries in C:\wamp\www\application\config\config.php
$config['base_url'] = 'http://mozvo.com/';
$config['index_page'] = '';
I bet you the issue is due to case-sensitivity on files. Your local host is on WAMP - which windows does does not care about file cases.
i.e. latestC.php = latestc.php = LASTESTC.php
but on your production server (which I'm guessing is a LAMP) - case sensitivity DOES matter
i.e. latestC.php != latestc.php != LASTESTC.php
All your controllers must be LOWERCASE for Codeigniter. So change your routes to
$route['default_controller'] = 'latestc'; // all lowercase
$route['404_override'] = 'latestc'; //all lowercase
and make sure all your files are all lowercase