简体   繁体   中英

Codeigniter routing throws 404 page not found error

When I am using url as

mysite.com/index.php/user/user the method is getting called.

But when I add below line in routes.php so that I can access the function using custom url. it is throwing me error. 404 Not Found

I want to access the method using url as mysite.com/user

$route['user']['get'] = 'user/user';

user.php is present inside controller directory

    <?php
    use Restserver\Libraries\REST_Controller;
    defined('BASEPATH') OR exit('No direct script access allowed');

    require APPPATH . 'libraries/REST_Controller.php';
    require APPPATH . 'libraries/Format.php';

    class User extends REST_Controller {

        function __construct()
        {
            // Construct the parent class
            parent::__construct();
        }

        public function user_get(){
            $this->set_response("request recieved", REST_Controller::HTTP_OK); // OK (200) being the HTTP response code
        }
    }

[2nd question]

how to make a route to access the controller present inside certain folders in controller directory.

suppose a controller file is present in controllers/api/v1/ directory with file name user.php

Note: I have tried all the solutions given by users on other posts but issue was not resolved.


EDIT: Issue Resloved

Routing is working just fine now. I think the problem was, I was calling mysite.com/user , instead I should have called mysite.com/index.php/user

Second issue of index.php being in the url is also resolved. I was making the changes in .htaccess file which was present in Application folder instead. I created a .htaccess file in root folder then added below mentioned line of code

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule> 

You have set your route as

$route['user']['get'] = 'user/user';

Which is directing to the user controller and the user method. But in your controller you have a method called user_get .

So the simplest fix here is to change your route to point to the correct method. NOTE: You have no method called 'user' so why is that in the route?

So this...

$route['user']['get'] = 'user/user'; // the user method does not exist

Would become...

$route['user']['get'] = 'user/user_get'; // the user_get method does exist

Update: To remove index.php from your URL, your .htaccess might be

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

And make sure you add in your base_url in applications/config/config.php

$config['base_url'] = 'http://example.com';  // Change to your sites URL
$config['index_page'] = '';  // remove index.php                

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM