title: Removing index.php part of URI using .htaccess file in Codeigniter with Simplicity
body: <p>I am trying to remove the section of index.php from my URI's in my website. I am not versed at all in htaccess or apache, so if your solution has to do with that, please explain in simple terms that I can understand.</p>
  
  <p>This is just a learning project at the moment but I plan on using this website as a selling place for my home based business, so it is important that I figure this out for a more professional look.</p>
  
  <p><strong>Please Note:</strong> I have read and tried the example given in the CodeIgniter User Guide, and I have not succeeded. Perhaps its where I am placing the .htaccess file.</p>
  
  <p>Currently I am trying to rewrite the file that is included and be default has only one line:</p>
  
  <pre><code>Deny from all
  </code></pre>
  
  <p>**Again, I have already tried the code below from the CodeIgniter user guide without success.</p>
  
  <pre><code>RewriteEngine on
  RewriteCond $1 !^(index\.php|images|robots\.txt)
  RewriteRule ^(.*)$ /index.php/$1 [L]
  </code></pre>
  
  <p>I am including the main controller, the config.php file, the routes.php file, and the view for my basic navigation for my website below. Perhaps you could find an error.</p>
  
  <p><strong>Main Controller</strong></p>
  
  <pre><code>    &lt;?php
  session_start(); //we need to call PHP's session object to access it through CI
  if (!defined('BASEPATH'))
      exit('No direct script access allowed');
  
  class Main extends CI_Controller {
  
      function __construct() {
          parent::__construct();
      }
  
      public function index() {
          $this-&gt;load-&gt;helper('url');
          $title = 'ImpactU Online';
          $subtitle = 'Is Your Next Web Project Ready?';
          $subhead = 'A Little About Us';
          $this-&gt;load-&gt;view('template/header', array(
              'title' =&gt; $title,
              'subtitle' =&gt; $subtitle,
              'subhead' =&gt; $subhead,
          ));
          $this-&gt;load-&gt;view('home');
          $this-&gt;load-&gt;view('template/footer');
      }
  
  }
  </code></pre>
  
  <p><strong>config.php</strong></p>
  
  <pre><code>    &lt;?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  
  /*
  |--------------------------------------------------------------------------
  | Base Site URL
  |--------------------------------------------------------------------------
  |
  | URL to your CodeIgniter root. Typically this will be your base URL,
  | WITH a trailing slash:
  |
  |   http://example.com/
  |
  | If this is not set then CodeIgniter will guess the protocol, domain and
  | path to your installation.
  |
  */
  $config['base_url'] = '';
  
  /*
  |--------------------------------------------------------------------------
  | Index File
  |--------------------------------------------------------------------------
  |
  | Typically this will be your index.php file, unless you've renamed it to
  | something else. If you are using mod_rewrite to remove the page set this
  | variable so that it is blank.
  |
  */
  $config['index_page'] = '';
  
  /*
  |--------------------------------------------------------------------------
  | URI PROTOCOL
  |--------------------------------------------------------------------------
  |
  | This item determines which server global should be used to retrieve the
  | URI string.  The default setting of 'AUTO' works for most servers.
  | If your links do not seem to work, try one of the other delicious flavors:
  |
  | '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
  |
  */
  $config['uri_protocol'] = 'AUTO';
  
  /*
  |--------------------------------------------------------------------------
  | URL suffix
  |--------------------------------------------------------------------------
  |
  | This option allows you to add a suffix to all URLs generated by CodeIgniter.
  | For more information please see the user guide:
  |
  | http://codeigniter.com/user_guide/general/urls.html
  */
  
  $config['url_suffix'] = '';
  
  /*
  |--------------------------------------------------------------------------
  | Default Language
  |--------------------------------------------------------------------------
  |
  | This determines which set of language files should be used. Make sure
  | there is an available translation if you intend to use something other
  | than english.
  |
  */
  $config['language'] = 'english';
  
  /*
  |--------------------------------------------------------------------------
  | Default Character Set
  |--------------------------------------------------------------------------
  |
  | This determines which character set is used by default in various methods
  | that require a character set to be provided.
  |
  */
  $config['charset'] = 'UTF-8';
  
  /*
  |--------------------------------------------------------------------------
  | Enable/Disable System Hooks
  |--------------------------------------------------------------------------
  |
  | If you would like to use the 'hooks' feature you must enable it by
  | setting this variable to TRUE (boolean).  See the user guide for details.
  |
  */
  $config['enable_hooks'] = FALSE;
  
  
  /*
  |--------------------------------------------------------------------------
  | Class Extension Prefix
  |--------------------------------------------------------------------------
  |
  | This item allows you to set the filename/classname prefix when extending
  | native libraries.  For more information please see the user guide:
  |
  | http://codeigniter.com/user_guide/general/core_classes.html
  | http://codeigniter.com/user_guide/general/creating_libraries.html
  |
  */
  $config['subclass_prefix'] = 'MY_';
  
  
  /*
  |--------------------------------------------------------------------------
  | Allowed URL Characters
  |--------------------------------------------------------------------------
  |
  | This lets you specify with a regular expression which characters are permitted
  | within your URLs.  When someone tries to submit a URL with disallowed
  | characters they will get a warning message.
  |
  | As a security measure you are STRONGLY encouraged to restrict URLs to
  | as few characters as possible.  By default only these are allowed: a-z 0-9~%.:_-
  |
  | Leave blank to allow all characters -- but only if you are insane.
  |
  | DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
  |
  */
  $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
  
  
  /*
  |--------------------------------------------------------------------------
  | Enable Query Strings
  |--------------------------------------------------------------------------
  |
  | By default CodeIgniter uses search-engine friendly segment based URLs:
  | example.com/who/what/where/
  |
  | By default CodeIgniter enables access to the $_GET array.  If for some
  | reason you would like to disable it, set 'allow_get_array' to FALSE.
  |
  | You can optionally enable standard query string based URLs:
  | example.com?who=me&amp;what=something&amp;where=here
  |
  | Options are: TRUE or FALSE (boolean)
  |
  | The other items let you set the query string 'words' that will
  | invoke your controllers and its functions:
  | example.com/index.php?c=controller&amp;m=function
  |
  | Please note that some of the helpers won't work as expected when
  | this feature is enabled, since CodeIgniter is designed primarily to
  | use segment based URLs.
  |
  */
  $config['allow_get_array']      = TRUE;
  $config['enable_query_strings'] = FALSE;
  $config['controller_trigger']   = 'c';
  $config['function_trigger']     = 'm';
  $config['directory_trigger']    = 'd'; // experimental not currently in use
  
  /*
  |--------------------------------------------------------------------------
  | Error Logging Threshold
  |--------------------------------------------------------------------------
  |
  | If you have enabled error logging, you can set an error threshold to
  | determine what gets logged. Threshold options are:
  | You can enable error logging by setting a threshold over zero. The
  | threshold determines what gets logged. Threshold options are:
  |
  |   0 = Disables logging, Error logging TURNED OFF
  |   1 = Error Messages (including PHP errors)
  |   2 = Debug Messages
  |   3 = Informational Messages
  |   4 = All Messages
  |
  | For a live site you'll usually only enable Errors (1) to be logged otherwise
  | your log files will fill up very fast.
  |
  */
  $config['log_threshold'] = 0;
  
  /*
  |--------------------------------------------------------------------------
  | Error Logging Directory Path
  |--------------------------------------------------------------------------
  |
  | Leave this BLANK unless you would like to set something other than the default
  | application/logs/ folder. Use a full server path with trailing slash.
  |
  */
  $config['log_path'] = '';
  
  /*
  |--------------------------------------------------------------------------
  | Date Format for Logs
  |--------------------------------------------------------------------------
  |
  | Each item that is logged has an associated date. You can use PHP date
  | codes to set your own date formatting
  |
  */
  $config['log_date_format'] = 'Y-m-d H:i:s';
  
  /*
  |--------------------------------------------------------------------------
  | Cache Directory Path
  |--------------------------------------------------------------------------
  |
  | Leave this BLANK unless you would like to set something other than the default
  | system/cache/ folder.  Use a full server path with trailing slash.
  |
  */
  $config['cache_path'] = '';
  
  /*
  |--------------------------------------------------------------------------
  | Encryption Key
  |--------------------------------------------------------------------------
  |
  | If you use the Encryption class or the Session class you
  | MUST set an encryption key.  See the user guide for info.
  |
  */
  $config['encryption_key'] = 'C6hVYfUz5FQ2gMOz1TaT74CfSBKjR1dx';
  
  /*
  |--------------------------------------------------------------------------
  | Session Variables
  |--------------------------------------------------------------------------
  |
  | 'sess_cookie_name'        = the name you want for the cookie
  | 'sess_expiration'         = the number of SECONDS you want the session to last.
  |   by default sessions last 7200 seconds (two hours).  Set to zero for no expiration.
  | 'sess_expire_on_close'    = Whether to cause the session to expire automatically
  |   when the browser window is closed
  | 'sess_encrypt_cookie'     = Whether to encrypt the cookie
  | 'sess_use_database'       = Whether to save the session data to a database
  | 'sess_table_name'         = The name of the session database table
  | 'sess_match_ip'           = Whether to match the user's IP address when reading the session data
  | 'sess_match_useragent'    = Whether to match the User Agent when reading the session data
  | 'sess_time_to_update'     = how many seconds between CI refreshing Session Information
  |
  */
  $config['sess_cookie_name']     = 'ci_session';
  $config['sess_expiration']      = 7200;
  $config['sess_expire_on_close'] = FALSE;
  $config['sess_encrypt_cookie']  = FALSE;
  $config['sess_use_database']    = FALSE;
  $config['sess_table_name']      = 'ci_sessions';
  $config['sess_match_ip']        = FALSE;
  $config['sess_match_useragent'] = TRUE;
  $config['sess_time_to_update']  = 300;
  
  /*
  |--------------------------------------------------------------------------
  | Cookie Related Variables
  |--------------------------------------------------------------------------
  |
  | 'cookie_prefix' = Set a prefix if you need to avoid collisions
  | 'cookie_domain' = Set to .your-domain.com for site-wide cookies
  | 'cookie_path'   =  Typically will be a forward slash
  | 'cookie_secure' =  Cookies will only be set if a secure HTTPS connection exists.
  |
  */
  $config['cookie_prefix']    = "";
  $config['cookie_domain']    = "";
  $config['cookie_path']      = "/";
  $config['cookie_secure']    = FALSE;
  
  /*
  |--------------------------------------------------------------------------
  | Global XSS Filtering
  |--------------------------------------------------------------------------
  |
  | Determines whether the XSS filter is always active when GET, POST or
  | COOKIE data is encountered
  |
  */
  $config['global_xss_filtering'] = TRUE;
  
  /*
  |--------------------------------------------------------------------------
  | Cross Site Request Forgery
  |--------------------------------------------------------------------------
  | Enables a CSRF cookie token to be set. When set to TRUE, token will be
  | checked on a submitted form. If you are accepting user data, it is strongly
  | recommended CSRF protection be enabled.
  |
  | 'csrf_token_name' = The token name
  | 'csrf_cookie_name' = The cookie name
  | 'csrf_expire' = The number in seconds the token should expire.
  */
  $config['csrf_protection'] = FALSE;
  $config['csrf_token_name'] = 'csrf_test_name';
  $config['csrf_cookie_name'] = 'csrf_cookie_name';
  $config['csrf_expire'] = 7200;
  
  /*
  |--------------------------------------------------------------------------
  | Output Compression
  |--------------------------------------------------------------------------
  |
  | Enables Gzip output compression for faster page loads.  When enabled,
  | the output class will test whether your server supports Gzip.
  | Even if it does, however, not all browsers support compression
  | so enable only if you are reasonably sure your visitors can handle it.
  |
  | VERY IMPORTANT:  If you are getting a blank page when compression is enabled it
  | means you are prematurely outputting something to your browser. It could
  | even be a line of whitespace at the end of one of your scripts.  For
  | compression to work, nothing can be sent before the output buffer is called
  | by the output class.  Do not 'echo' any values with compression enabled.
  |
  */
  $config['compress_output'] = FALSE;
  
  /*
  |--------------------------------------------------------------------------
  | Master Time Reference
  |--------------------------------------------------------------------------
  |
  | Options are 'local' or 'gmt'.  This pref tells the system whether to use
  | your server's local time as the master 'now' reference, or convert it to
  | GMT.  See the 'date helper' page of the user guide for information
  | regarding date handling.
  |
  */
  $config['time_reference'] = 'local';
  
  
  /*
  |--------------------------------------------------------------------------
  | Rewrite PHP Short Tags
  |--------------------------------------------------------------------------
  |
  | If your PHP installation does not have short tag support enabled CI
  | can rewrite the tags on-the-fly, enabling you to utilize that syntax
  | in your view files.  Options are TRUE or FALSE (boolean)
  |
  */
  $config['rewrite_short_tags'] = FALSE;
  
  
  /*
  |--------------------------------------------------------------------------
  | Reverse Proxy IPs
  |--------------------------------------------------------------------------
  |
  | If your server is behind a reverse proxy, you must whitelist the proxy IP
  | addresses from which CodeIgniter should trust the HTTP_X_FORWARDED_FOR
  | header in order to properly identify the visitor's IP address.
  | Comma-delimited, e.g. '10.0.1.200,10.0.1.201'
  |
  */
  $config['proxy_ips'] = '';
  
  
  /* End of file config.php */
  /* Location: ./application/config/config.php */
  </code></pre>
  
  <p><strong>routes.php</strong></p>
  
  <pre><code>    &lt;?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  /*
  | -------------------------------------------------------------------------
  | URI ROUTING
  | -------------------------------------------------------------------------
  | This file lets you re-map URI requests to specific controller functions.
  |
  | Typically there is a one-to-one relationship between a URL string
  | and its corresponding controller class/method. The segments in a
  | URL normally follow this pattern:
  |
  |   example.com/class/method/id/
  |
  | In some instances, however, you may want to remap this relationship
  | so that a different class/function is called than the one
  | corresponding to the URL.
  |
  | Please see the user guide for complete details:
  |
  |   http://codeigniter.com/user_guide/general/routing.html
  |
  | -------------------------------------------------------------------------
  | RESERVED ROUTES
  | -------------------------------------------------------------------------
  |
  | There area two reserved routes:
  |
  |   $route['default_controller'] = 'welcome';
  |
  | This route indicates which controller class should be loaded if the
  | URI contains no data. In the above example, the "welcome" class
  | would be loaded.
  |
  |   $route['404_override'] = 'errors/page_missing';
  |
  | This route will tell the Router what URI segments to use if those provided
  | in the URL cannot be matched to a valid route.
  |
  */
  
  $route['default_controller'] = "main";
  $route['404_override'] = '';
  
  
  /* End of file routes.php */
  /* Location: ./application/config/routes.php */
  </code></pre>
  
  <p><strong>Header View With Basic Site Navigation Links</strong></p>
  
  <pre><code>    &lt;!DOCTYPE html&gt;
  &lt;html lang="en"&gt;
      &lt;head&gt;
          &lt;meta charset="utf-8"/&gt;
          &lt;meta name=viewport content="width=device-width, initial-scale=1"&gt;
          &lt;title&gt;&lt;?php echo html_escape($title); ?&gt;&lt;/title&gt;
          &lt;meta name="descripton" content="Is Your Next Web Project Ready? Check out ImpactU Online! We got this. DISCLAIMER: ImpactU is not a real company and any similarity to any other company so namesd is purely by chance. This site is for educational purposes ONLY."/&gt;
          &lt;link rel="shortcut icon" href="&lt;?php echo base_url("assets/images/favicon.ico"); ?&gt;" type="image/x-icon"&gt;
          &lt;link rel="icon" href="&lt;?php echo base_url("assets/images/favicon.ico"); ?&gt;" type="image/x-icon"&gt;
          &lt;link 
              href="&lt;?php
              echo base_url('assets/css/impactU.css');
              ?&gt;" rel="stylesheet" type="text/css"
              /&gt;
          &lt;link 
              href="&lt;?php
              echo base_url('assets/font-awesome-4.2.0/css/font-awesome.min.css');
              ?&gt;" rel="stylesheet" type="text/css"
              /&gt;
          &lt;link 
              href="&lt;?php
              echo base_url('assets/bootstrap/css/bootstrap.min.css');
              ?&gt;" rel="stylesheet" type="text/css"
              /&gt;
          &lt;link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/pure-min.css"&gt;
          &lt;link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/grids-responsive-min.css"&gt;
          &lt;script src="http://yui.yahooapis.com/3.18.1/build/yui/yui-min.js"&gt;&lt;/script&gt;
          &lt;link 
              href="&lt;?php
              echo base_url('assets/css/side-menu.css');
              ?&gt;" rel="stylesheet" type="text/css"
              /&gt;
          &lt;script&gt;
              (function (i, s, o, g, r, a, m) {
                  i['GoogleAnalyticsObject'] = r;
                  i[r] = i[r] || function () {
                      (i[r].q = i[r].q || []).push(arguments)
                  }, i[r].l = 1 * new Date();
                  a = s.createElement(o),
                          m = s.getElementsByTagName(o)[0];
                  a.async = 1;
                  a.src = g;
                  m.parentNode.insertBefore(a, m)
              })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
  
              ga('create', 'UA-57039794-1', 'auto');
              ga('send', 'pageview');
  
          &lt;/script&gt;
      &lt;/head&gt;
      &lt;body&gt;
          &lt;div id="layout"&gt;
              &lt;!-- Menu toggle --&gt;
              &lt;a href="#menu" id="menuLink" class="menu-link"&gt;
                  &lt;!-- Hamburger icon --&gt;
                  &lt;span&gt;&lt;/span&gt;
              &lt;/a&gt;
  
              &lt;div id="menu"&gt;
                  &lt;div class="pure-menu pure-menu-open"&gt;
                      &lt;a class="pure-menu-heading" href="&lt;?php echo site_url(); ?&gt;"&gt;ImpactU&lt;/a&gt;
  
                      &lt;ul&gt;
                          &lt;li  &lt;?php echo $title == 'ImpactU Online' ? 'class = "menu-item-divided pure-menu-selected"' : ''; ?&gt;&gt;&lt;a href="&lt;?php echo site_url(); ?&gt;" title="Home"&gt;
                                  &lt;i class="fa fa-home"&gt;&lt;/i&gt;
                                  Home
                              &lt;/a&gt;
                          &lt;/li&gt;
                          &lt;li  &lt;?php echo $title == 'ImpactU Blog' ? 'class = "menu-item-divided pure-menu-selected"' : ''; ?&gt;&gt;&lt;a href="&lt;?php echo site_url('blog'); ?&gt;" title="News, Annoucements, and Web Management Tips"&gt;
                                  &lt;i class="fa fa-rss"&gt;&lt;/i&gt;
                                  Blog
                              &lt;/a&gt;
                          &lt;/li&gt;
                          &lt;li &lt;?php echo $title == 'ImpactU Store' ? 'class = "menu-item-divided pure-menu-selected"' : ''; ?&gt;&gt;&lt;a href="&lt;?php echo site_url('store'); ?&gt;" title="Find resources for your next web project"&gt;
                                  &lt;i class="fa fa-money"&gt;&lt;/i&gt;
                                  Store
                              &lt;/a&gt;
                          &lt;/li&gt;
                          &lt;li &lt;?php echo $title == 'ImpactU Contact' ? 'class = "menu-item-divided pure-menu-selected"' : ''; ?&gt;&gt;&lt;a href="&lt;?php echo site_url('contact'); ?&gt;" title="Get in touch with us"&gt;
                                  &lt;i class="fa fa-envelope"&gt;&lt;/i&gt;
                                  Contact
                              &lt;/a&gt;
                          &lt;/li&gt;
                          &lt;li &lt;?php echo $title == 'ImpactU About' ? 'class = "menu-item-divided pure-menu-selected"' : ''; ?&gt;&gt;&lt;a href="&lt;?php echo site_url('about'); ?&gt;" title="Find out about this school project"&gt;
                                  &lt;i class="fa fa-exclamation-circle"&gt;&lt;/i&gt;
                                  About
                              &lt;/a&gt;
                          &lt;/li&gt;
                          &lt;li &lt;?php echo $title == 'ImpactU Feedback' ? 'class = "menu-item-divided pure-menu-selected"' : ''; ?&gt;&gt;&lt;a href="&lt;?php echo site_url('feedback'); ?&gt;" title="Let me know what you think"&gt;
                                  &lt;i class="fa fa-pencil"&gt;&lt;/i&gt;
                                  Feedback
                              &lt;/a&gt;
                          &lt;/li&gt;
                          &lt;li class="menu-item-divided &lt;?php echo $title == 'ImpactU Company Login' ? 'pure-menu-selected' : ''; ?&gt;"&gt;&lt;a href="&lt;?php echo site_url('company_home'); ?&gt;" title="Employees enter here"&gt;
                                  &lt;i class="fa fa-lock"&gt;&lt;/i&gt;
                                  Company Login
                              &lt;/a&gt;
                          &lt;/li&gt;
                      &lt;/ul&gt;
                  &lt;/div&gt;
              &lt;/div&gt;
  
              &lt;div id="main"&gt;
                  &lt;div class="header"&gt;
                      &lt;h1&gt;&lt;?php echo html_escape($title); ?&gt;&lt;/h1&gt;
                      &lt;h2&gt;&lt;?php echo html_escape($subtitle); ?&gt;&lt;/h2&gt;
                  &lt;/div&gt;
  
                  &lt;div class="content"&gt;
                      &lt;h2 class="content-subhead"&gt;&lt;?php echo html_escape($subhead); ?&gt;&lt;/h2&gt;
  </code></pre>
  
  <p>Thank you in advance. Sorry about including so much code, but I like to show that I have the work in order to look for a solution before I ask. I have researched this already a lot on Stack Overflow, but haven't been able to find a solution. Please test your solution before submitting it as a courtesy. I have found a lot of people are just saying look at the user guide because it seemingly says to do one thing but <strong>as I have stated before, I have tried to published solution in the user guide and failed</strong>.</p>