7

I'm currently developing a website using CodeIgniter and I recently stumbled upon a routing & .htaccess problem.

Basically, the structure of my simple website (let's call my project 'CIExample' for the sake of simplicity) is as follow:

-Home
-About Us
-Our Service
-News
-Contact Us

which I implemented using a Page controller. This controller has 5 functions which called respective page's view, i.e:

Home(), which calls the view 'Home'
About(), which calls the view 'About Us' and so on..

Previously, to access 'Home', I would need to type http://localhost/CIExample/index.php/page/home into the url window, but after setting the following routes I was able to remove the 'page' (classname) part:

$route['default_controller'] = 'page/home';
$route['home'] = 'page/home';
$route['about'] = 'page/about';
$route['service'] = 'page/service';
$route['news'] = 'page/news';
$route['contact'] = 'page/contact';

However, the tricky part came when I try to remove the 'index.php'. I want to be able to access the home page by typing http://localhost/CIExample/home.

So I did a lot of searches on CI forum/tutorial/stack overflow, and found some codes for .htaccess file:

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

or http://ellislab.com/forums/viewthread/197675/#929904
I tried both codes but none works..

http://localhost/CIExample/home would direct me to 404 not found page, but http://localhost/CIExample/index.php/home would work just fine.

I wonder what went wrongs? Is it my routes.php or .htaccess or both? Thanks.

Note: I've also changed my 'config/config.php' file -> $config['index_page'] = '';

EDIT: Finally it works! After tweaking the config.php file in config folder and set the following $config['uri_protocol'] = 'PATH_INFO'; (from 'AUTO').

Available Values:

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO

Dunno what's the different but according to one of the comments in http://www.jotorres.com/2011/12/removing-index-php-from-url-in-codeigniter/, the same code might/might not work in the production server.

Anyone can explain the reason maybe?

2
  • The code from the CI forum should work. That's what I use. You might need to define your base since you're in a subdirectory-- RewriteBase /CIExample/ Commented Mar 18, 2013 at 16:46
  • Please, mark the answer that helped you. It helps out the the author and the viewers. Commented Oct 19, 2015 at 15:41

6 Answers 6

15

You just need to paste this in your .htaccess file:

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

and make this alternation to your application/config/config.php file:

$config['index_page'] = '';
Sign up to request clarification or add additional context in comments.

Comments

4

I have use following method, it is working perfectly in UBUNTU...!!

First of all verify that you have enabled mod_rewrite (you can verify using phpinfo()) in your index.php file.

IF DISABLED mod_rewrite then RUN: 1. sudo a2enmod rewrite 2. sudo gedit /etc/apache2/sites-available/defaut just replace "AllowOverride None" to "AllowOverride All" in Tag(<'Directory /var/www/'>) 3. Then please run sudo service apache2 restart

Ok Good... Now in your root directory of Codeigniter -> Find .htaccess file, if not found then press ctrl+h , still not found then create a file .htaccess

In .htaccess Paste following code :

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /ROOT DIRECTORY NAME/

        # Directs all EE web requests through the site index file
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Ok finally just replace ROOT DIRECTORY NAME

DONT FORGOT TO REMOVE index.php from application/config/config.php file Make that line like $config['index_page'] = '';

Comments

2

I use this htaccess for all my CodeIgniter projects. It supports subfolders too.

<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>

1 Comment

yup, this one also works after I tweaked the config.php file in config folder (see EDIT above). But thanks mate :)
1

In your system/application/config/config.php, Change

$config['index_page'] = "index.php";

To

$config['index_page'] = "";

And in your .htaccess,add this:

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

Comments

0
for Codeigniter 3.1.4

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php56” package as the default “PHP” programming language.
<IfModule mime_module>
  AddType application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit

# BEGIN cPanel-generated php ini directives, do not edit
# Manual editing of this file may result in unexpected behavior.
# To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
# For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
<IfModule php5_module>
   php_flag asp_tags On
   php_flag display_errors On
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit 512M
   php_value post_max_size 128M
   php_value session.gc_maxlifetime 1440
   php_value session.save_path "/var/cpanel/php/sessions/ea-php56"
   php_value upload_max_filesize 128M
   php_flag zlib.output_compression Off
</IfModule>
# END cPanel-generated php ini directives, do not edit
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>

Comments

0
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Live:

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

Local:

#RewriteRule .* index.php/$0 [PT,L]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.