luxiconn
luxiconn

Reputation: 173

CodeIgniter Remove index.php with .htaccess

I've been working on this for an hour already so I figured I might as well ask.

I am trying to remove the index.php from my CodeIgniter app's URL and can not do it.

The app is running on a dedicated server in my office and I access the app through the url http://smr_local

This is my base virtual host block

<VirtualHost 192.168.1.90:80> 
    ServerAdmin [email protected]
    DocumentRoot "/var/www/smr.dev/app"
    ServerName smr_local
    ErrorLog "/etc/httpd/logs/error_log"
    CustomLog "/etc/httpd/logs/access_log" common
    <Directory /var/www/smr.dev/app>
        Order allow,deny
        Allow from all
        AllowOverride All
    </Directory>
    <IfModule mod_rewrite.c>
        RewriteEngine on
    </IfModule>
</VirtualHost>

Here is my .htaccess file

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [QSA,L]

And my config file

$config['base_url']    = "http://smr_local/";
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';

Right now when I'm trying to access my base url http://smr_local/user/courses I get an error in my apache error log I get this.

File does not exist: /var/www/smr.dev/app/user

I really don't know what to try next. Any help would be appreciated.

Upvotes: 0

Views: 3048

Answers (1)

Edward Ruchevits
Edward Ruchevits

Reputation: 6696

Have you checked official user guide?

example.com/index.php/news/article/my_article

You can easily remove this file by using a .htaccess file with some simple rules. Here is an example of such a file, using the "negative" method in which everything is redirected except the specified items:

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

In the above example, any HTTP request other than those for index.php, images, and robots.txt is treated as a request for your index.php file.


I have been working with Codeigniter previously and that is how I get it to work:

Here is my .htaccess (assuming you have default folder structure):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # Removes access to the system folder by users.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    # Prevents user access to the application folder
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule> 

That is relevant part of config.php:

$config['base_url'] = '';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';
$config['url_suffix'] = '';

If this won't help, your problem likely in Apache configuration.

Then provide your httpd.conf and any other relevant configurations, not only virtual-hosts.

Upvotes: 1

Related Questions