default_controller (in routes.php) not working in production - php

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

Related

CodeIgniter doesn't load default controller on '/'

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. :)

How to set default page in codeigniter

I have set routes in routes.php for my default page but it shows a 404 error when opening localhost/mywebsite
$route['default_controller'] = "page";
$route['404_override'] = 'page';
I have set the above code in routes.php which gives a 404 error. The page controller has been created.
You need to make sure following things:
Webserver rewrite module is installed
htaccess file is properly configured
index function is present in page controller
You configured default controller & 404_override URL with the same value.
When ever you access to your web site automatically open page controller index function
ie ur_project_url/page/index
OR
ur_project_url/index.php/page/index
when ever you can get the 404 error also open same page controller index function
ie ur_project_url/page/index
OR
ur_project_url/index.php/page/index
please check your controllers and function and routes ,htacess file
please remove your url index.php using htacess
in config folder $config['log_threshold'] = 0; to $config['log_threshold'] = 1; check log files

Page not found after update to Codeigniter 3

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
}

Codeigniter 404_override not working in routes

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.

codeigniter moving from localhost to server

getting 404 error
404 Page Not Found
The page you requested was not found.
config.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['base_url'] = 'http://myhost/sitedir';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';
default controlerr
class MY extends CI_Controller{
function __construct(){
parent::__construct();
// language
if($this->input->post("lang")){
$this->load->model("language");
$this->language->lang($this->input->post("lang"));
}
// !language
//$this->lang->load("ge");
if (!$this->session->userdata('lang'))
$this->lang->load("ge");
else
$this->lang->load($this->session->userdata('lang'));
}
/**
* mtavari gverdis controleri
*/
function index(){
$this->load->model("dbs");
$data['products'] = $this->dbs->get_products_by_limit("products",7);
$this->load->view("header");
$this->load->view("index_page",$data);
$this->load->view("footer");
}
}
uploaded default ci package in other directory and it working
i don't have a .htaccess file
sorry for my bad english :(
help me :(
Edit this line as per your server address
$config['base_url'] = 'http://server_addr/sitedir';-->like this
itÅ› Ok. My english i'ts bad too.
If you don't use .httaccess , the URL for you website must be:
'http://website/sitedir/index.php/my'
in the defualt package you can use :
; because del defaul, `
config['index_page'] = '';
, if i don't forget it was set to "welcome".
My web site is in codeignite too, and i had this problems too reference at my incial page.
Your Configuration .php is the same as the my. But i use a . httaccess, to clear the index.php URL.
i hope help a little .
Your problem is in routing or HTACCESS Set the variable empty as below.
$config['index_page'] = '';
try to replace following variable with these parameters ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI', and 'ORIG_PATH_INFO') one by one
$config['uri_protocol'] = 'AUTO';
I had this problem for the longest.. In my case, after messsing with the config file, routes, htaccess, etc... In the end the problem was that my CPANEL server was hosted through Linux and linux is case sensitive when it comes to file names. All my controllers had a capital letter for the first letter of the file name. When I changed this to lower case, it worked fine. Maybe this is your issue as well. Good luck to all.

Categories