title: codeigniter 2 htaccess routing differences
body: <p>Codeigniter v2.0 that was released on the 28th. I just setup a fresh installation and tried to remove the index.php from the url. I am using the same apache site-available configuration, htaccess, and codeigniter configuration.</p>
  
  <p>Codeignter only loads the default controller defined in routes.php when I exclude the index.php.</p>
  
  <p>For example</p>
  
  <ul>
  <li><a href="http://myurl.com/welcome" rel="nofollow">http://myurl.com/welcome</a> will load the welcome controller</li>
  <li><a href="http://myurl.com/events" rel="nofollow">http://myurl.com/events</a> will load the welcome controller</li>
  <li>but <a href="http://myurl.com/index.php/events" rel="nofollow">http://myurl.com/index.php/events</a> will load the events controller</li>
  </ul>
  
  <p>Here is my apache configuration for the site in question.</p>
  
  <pre><code>&lt;VirtualHost *:80&gt;
  ServerAdmin webmaster@localhost
  ServerName myurl.com
  DocumentRoot /var/www/myurl.com
  &lt;Directory /&gt;
      Options FollowSymLinks
      AllowOverride FileInfo
  &lt;/Directory&gt;
  &lt;Directory /var/www/myurl.com&gt;
      Options Indexes FollowSymLinks MultiViews
      AllowOverride FileInfo
      Order allow,deny
      allow from all
  &lt;/Directory&gt;
  
  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  &lt;Directory "/usr/lib/cgi-bin"&gt;
      AllowOverride None
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Order allow,deny
      Allow from all
  &lt;/Directory&gt;
  
  ErrorLog /var/log/apache2/error.log
  
  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  
  CustomLog /var/log/apache2/access.log combined
  
  Alias /doc/ "/usr/share/doc/"
  &lt;Directory "/usr/share/doc/"&gt;
      Options Indexes MultiViews FollowSymLinks
      AllowOverride None
      Order deny,allow
      Deny from all
      Allow from 127.0.0.0/255.0.0.0 ::1/128
  &lt;/Directory&gt;
  </code></pre>
  
  <p></p>
  
  <p>Here is my htaccess configuration</p>
  
  <pre><code>&lt;IfModule mod_rewrite.c&gt;
  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]
  
  &lt;/IfModule&gt;
  
  &lt;IfModule !mod_rewrite.c&gt;
      # 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
  </code></pre>
  
  <p></p>
  
  <p>And here is my codeigniter configuration file found /var/www/mysite.com/application/config/config.php</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']    = 'mysite.com';
  
   /*
   |--------------------------------------------------------------------------
   | 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'] = '';
  </code></pre>