I was developing in XAMPP environment on my local machine, and everything is fine. I can access my controller like this:
localhost/myproject/index.php/catalog/home/get
catalog
is the sub folder under controllers
.
However, after I uploaded my project to the server. I should be able to access my page by the following url:
http://www.example.com/index.php/catalog/home/index
but this gives me a 404 page.
The only url works is the default page I defined in the route.php
file:
$route['default_controller'] = 'welcome';
In the config.php
, I set my base_url to be http://www.example.com/
All my controllers' first letter are capitalized and I'm using CI 3.1X. My server is a linux which uses nginx instead of apache. I tried to modify or delete my .htaccess file, but it doesn't solve my problem.
I'm not looking for an exact answer, I would like to know how to debug my code in this situation.
Here is an example of one of my controllers:
<?php
class Survey extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('catalog/model_survey');
$this->load->helper('url');
}
public function index()
{
$error = $this->input->get('error');
if (isset($error)) {
$data['error'] = true;
} else {
$data['error'] = false;
}
$data['action'] = "index.php/catalog/success";
$data['base'] = base_url();
$this->load->view('catalog/survey', $data);
}
}
Here is my folder structure:
application
|-- cache
|-- config
|-- controllers
| |-- admin
| | |-- common
| | |-- redpacket
| | |-- setting
| | `-- tools
| `-- catalog
|-- core
|-- helpers
|-- hooks
|-- language
| |-- chinese
| | `-- admin
| | |-- common
| | |-- redpacket
| | |-- setting
| | `-- tools
| `-- english
| `-- admin
| `-- common
|-- libraries
|-- logs
|-- models
| |-- admin
| | |-- common
| | |-- redpacket
| | |-- setting
| | |-- tools
| | `-- user
| `-- catalog
|-- third_party
`-- views
|-- admin
| |-- common
| |-- redpacket
| |-- setting
| `-- tools
|-- catalog
`-- errors
|-- cli
`-- html
After comparing my local environment and the production environment, I found that I'm using Apache on my local machine, but nginx on the server. Thus, I'm guessing the problem would be the setting of my nginx config file.
After doing some research, this is what I found online: https://www.nginx.com/resources/wiki/start/topics/recipes/codeigniter/?highlight=codeigniter
I modified my nginx config file to this, and everything works fine now. By using this config, it also get rid of the index.php in the url. You can access the web by type http://www.example.com/survey
, or if you did what I did, adding a sub folder under controller, just simply add your sub folder in the url http://www.example.com/catalog/survey
it looks like you forgot to update .htaccess file on the server
Consider the following checklist.
Survey.php
, S
must be capital.catalog
for case sensitivity.I use following .htaccess
code in most of my projects.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Edited answer:
In your given directory hierarchy, all your controller
and model
names are in lower case. As per the CI 3.X standard, the Classes
first character is capitalized and the same is applicable for their respective files.
localhost/myproject/index.php/catalog/home/get
Here localhost is hostname, myproject is project name catalog is controller sub folder name, home is controller name, and get is function under home controller.
in Home make H capital as it is class name, and check .htaccess file