[Solved] Codeigniter remove /index.php from URL

Okay so I know that a lot of people have been asking the same or similar questions, but I don’t seem to find a solution that works for my project. So please don’t put this as a duplicate.

I have a website made with codeigniter. It was running just fine without the index.php in the url. So the rewrite was successfull. Until a few days ago: all of a sudden the admin area (/admin) returned a 404 and was only accessible by the path ‘/index.php/admin’. The rewrite code that once used to work didn’t do a thing anymore.

And know I’m back at the start -> the problem is that I cannot delete the index.php from my url.

I tried so many things that I don’t know what to do anymore.

The application is stored under ‘public_html/application/…
The image below is inside the application folder where the .htaccess file and index.php are.
Is this the right location to change the .htaccess?

enter image description here

I tried rewriting the .htaccess but without success:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

RewriteEngine on
RewriteCond $1 !^(index.php|public|.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^CI/(index.php|public|images|robots.txt|css)
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteEngine on
RewriteCond $1 !^(index.php|images|robots|css.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

My config file:

$config['base_url'] = 'http://www.mysite.be/';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';


$route['default_controller'] = "c_home/index";
$route['404_override'] = '';
$route['admin'] = "c_home/adminpanel";
$route['logout'] = "c_login/logout";

Does anybody have a clue what is going on or how this can be fixed?

Thanks in advance!

Solution #1:

The .htaccess should be in the public_html directory — ie: one level up from the current location.
The index.php is presumably in public_html already and
The index.* you have in the picture is index.html — as it should be.
If .htaccess is in the right place per the above, then this .htaccess code will work:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]  
Respondent: steve

Solution #2:

So I have been messing around with this and finally made it work

For this I made changes to the htaccess and controllers.
I changed the admin function to a new controller and changed this in the routes.php

new routing

$route['admin'] = "c_login/index";

new .htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 
Respondent: Filip Huysmans

Solution #3:

Try set

$config['uri_protocol'] = 'PATH_INFO'

And set

$config['enable_query_strings'] = FALSE;
Respondent: Nik

Solution #4:

If we need a remove /index.php from url in codeigniter


  $config['index_page'] = '';

  $config['uri_protocol'] = 'REQUEST_URI';

add .htaccess file at root directory of project

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

Now you can access like


May it’s helpfull for you

Respondent: Kamlesh

Solution #5:

I don’t know what the heck you’re doing with all that code, but I just put this in my .htaccess file:

RewriteRule ^(.*)$ /index.php?/$1 [L]

And boom.

Respondent: Matt Saunders

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.