Codeigniter's URL Rewriting Codeigniter's URL Rewriting codeigniter codeigniter

Codeigniter's URL Rewriting


RewriteEngine OnRewriteCond %{REQUEST_FILENAME} -s [OR]RewriteCond %{REQUEST_FILENAME} -l [OR]RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^.*$ - [NC,L]RewriteRule ^(.*)$ /index.php/$1 [NC,L]

That'll pass any request that Apache wouldn't serve off to CodeIgniter. This way you're free to create directories all over without updating your rewrite rules, and you don't need to setup 404 handling in Apache (even inside your image/resource directories).

Credit goes to the Zend Framework authors that recommend this bit in their user guide. This version is slightly modified for CodeIgniter.


This is the .htaccess file I use for my CI install:

If you have it in a subfolder you will need to edit RewriteBase.

<IfModule mod_rewrite.c>    RewriteEngine On    RewriteBase /    #Removes access to the system folder by users.    #Additionally this will allow you to create a System.php controller,    #previously this would not have been possible.    #'system' can be replaced if you have renamed your system folder.    RewriteCond %{REQUEST_URI} ^system.*    RewriteRule ^(.*)$ /index.php?/$1 [L]    #When your application folder isn't in the system folder    #This snippet prevents user access to the application folder    #Submitted by: Fabdrol    #Rename 'application' to your applications folder name.    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>    # If we don't have mod_rewrite installed, all 404's    # can be sent to index.php, and everything works as normal.    # Submitted by: ElliotHaughin    ErrorDocument 404 /index.php</IfModule> 


Here is complete solution which i am using and found working nicely:

Place this code snippet below in .htaccess file at your project root like http://localhost/myProject

RewriteEngine OnRewriteBase /appDirNameRewriteCond %{REQUEST_URI} ^appDirName.*RewriteRule ^(.*)$ /index.php/$1 [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php/$1 [L]

And at your CI config file located at system\application\config\config.php

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