Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CodeIgniter: Is it possible to remove index.php without using .htaccess?

For technical reasons, I don't want to use .htaccess to remove index.php from URL in CodeIgniter. I have seen the route section. I also tried with a route like this:

$route['(:any)'] = 'index.php/$1';

But it is not working.

Is it possible to remove index.php using the router in CodeIgniter?

like image 801
itskawsar Avatar asked Jun 24 '13 02:06

itskawsar


2 Answers

Is it possible to remove index.php without using .htaccess?

No. it is something beyond php or codeigniter, its a server thing.

Why ?

What happens when user try to go to localhost/codeigniter/welcome/index ?

MVC basically hide all your php files inside its folders. and present only one way for any user to interact with your code through index.php

what happen is

  1. HTTP request to your website directed to index.php
  2. index.php load codeigniter bootstrap and call codeigniter router
  3. router look up the url typed (welcome/index) then go fetch the file welcome from inside controller folder and call index function.

this is plain simple what all MVC frameworks do, hide your code and use a single front file to handle all requests and redirect them using a router class.

so if you want to hide index.php then you need to find a way to tell your server to simply redirect any call to index.php.

index.php is the access door for your website, and your server need to know that all requests must be sent to it. some way or another, and thats why index.php/ must exisit in ur url or use some server configuration to redirect calls to it. but it is always loaded

like image 160
Zalaboza Avatar answered Nov 04 '22 17:11

Zalaboza


I have done the following to work with routes that do not require to have index.php in your url.

  1. I have renamed index.php in index_ci.php for security reasons.
  2. In .htaccess file I have the following:

    DirectoryIndex index_ci.php index.html
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteCond $1 !^(index_ci\.php) # do not allow direct access  
    RewriteRule ^(.*)$ index_ci.php/$1 [L,QSA]
    
  3. My routes.php now accepts urls without index.php prefix. Example:

    $route['welcome'] = "welcome";
    
like image 1
machineaddict Avatar answered Nov 04 '22 18:11

machineaddict