6
votes

I have following structure of my project

/system
/applications
  /cache
  /core
  /helpers
  /hook
  /language
  /libraries
  /logs
  /third_party
  /admin-panel
     /config
     /controllers
        welcome.php
        dashboard.php
     /errors
     /models
     /views
        welcome.php
        dashboard.php
  /user-panel
     /config
     /controllers
            welcome.php
            dashboard.php
     /errors
     /models
     /views
        welcome.php
        dashboard.php
/admin
  index.php
index.php

My index.php inside my project folder has user-panel as my application folder and index.php in admin folder has admin-panel as my application folder.

I have inserted this line $route['default_controller'] = "welcome"; $route['welcome'] = 'welcome'; in routes.php inside both user-panel and admin-panel

I can access welcome controller of my both user-panel and admin-panel by using http://localhost/myproject and http://localhost/myproject/admin

but i cannot access my dashboard controller by using http://localhost/myproject/dashboard or http://localhost/myproject/admin/dashboard

my dashboard controller is accessible by using http://localhost/myproject/index.php/dashboard or http://localhost/myproject/admin/index.php/dashboard

But i dont want index.php included in my url. I want to remove it. I have also tried by using .htaccess inside my admin folder. I write following line in this

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

but this didn't work for me. It give 404 not found CI error. I have also enabled mod_rewrite by changing AllowOerride None to AllowOverride All in httpd.conf. Please tell me what should i do to remove index.php and where should i place my .htaccess files in my project directory.

4
are you sure the rewrite module is loaded in Apache.Mina Abadir
As i have said that i have changed AllowOverride None to AllowOverride All and my .htaccess is in my admin folder. Is this a correct location?Naveen Chauhan
try placing your .htaccess in project's root folderSudhir Bastakoti
locate it in the same directory with index.phpMina Abadir
should i create two .htaccess files in both my project folder and admin folder because i index.php in both location?Naveen Chauhan

4 Answers

10
votes

if your root folder for project is not root of domain i.e. your website is subdirectory of a domain http://localhost/myproject then you need an additional line in your .htaccess file that is RewriteBase

RewriteEngine On
RewriteBase /myproject
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Also make sure, your config.php is configured as

$config['base_url'] = 'http://localhost/myproject/';
$config['index_page'] = '';

And mod_rewrite is enable in apache's config file.

2
votes

Open config.php from system/application/config directory

and replace

$config['index_page'] = “index.php” by $config['index_page'] = “”

Create a “.htaccess” file in the root of CodeIgniter directory

and add the following lines.

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

In some case the default setting for uri_protocol does not work properly.

To solve this problem just replace

`$config['uri_protocol'] = “AUTO”` 

by

 $config['uri_protocol'] = “REQUEST_URI” 

from system/application/config/config.php

1
votes

Be sure of the following :

  1. .htaccess needs to be placed in the same directory as the index.php file, usually root of the application.
  2. read the manual about codeigniter and .htaccess
  3. Be sure that apache is running the rewrite module named : rewrite_module you can read more about enabling the module on linux here : Blog post or for wamp here : Wamp icon -> Apache -> Apache Modules -> rewrite_module
0
votes

Have a look in the config.php file, there is a variable named 'index_page'

try changing

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

to

$config['index_page'] = "";