CodeIgniter URLs
****************

By default, URLs in CodeIgniter are designed to be search-engine and
human friendly. Rather than using the standard “query string” approach
to URLs that is synonymous with dynamic systems, CodeIgniter uses a
**segment-based** approach:

   example.com/news/article/my_article

Note:

  Query string URLs can be optionally enabled, as described below.


URI Segments
============

The segments in the URL, in following with the Model-View-Controller
approach, usually represent:

   example.com/class/function/ID

1. The first segment represents the controller **class** that should
   be invoked.

2. The second segment represents the class **function**, or method,
   that should be called.

3. The third, and any additional segments, represent the ID and any
   variables that will be passed to the controller.

The URI Library and the URL Helper contain functions that make it easy
to work with your URI data. In addition, your URLs can be remapped
using the URI Routing feature for more flexibility.


Removing the index.php file
===========================

By default, the **index.php** file will be included in your URLs:

   example.com/index.php/news/article/my_article

If your Apache server has *mod_rewrite* enabled, you can easily remove
this file by using a .htaccess file with some simple rules. Here is an
example of such a file, using the “negative” method in which
everything is redirected except the specified items:

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

In the above example, any HTTP request other than those for existing
directories and existing files is treated as a request for your
index.php file.

Note:

  These specific rules might not work for all server configurations.

Note:

  Make sure to also exclude from the above rule any assets that you
  might need to be accessible from the outside world.


Adding a URL Suffix
===================

In your **config/config.php** file you can specify a suffix that will
be added to all URLs generated by CodeIgniter. For example, if a URL
is this:

   example.com/index.php/products/view/shoes

You can optionally add a suffix, like **.html,** making the page
appear to be of a certain type:

   example.com/index.php/products/view/shoes.html


Enabling Query Strings
======================

In some cases you might prefer to use query strings URLs:

   index.php?c=products&m=view&id=345

CodeIgniter optionally supports this capability, which can be enabled
in your **application/config.php** file. If you open your config file
you’ll see these items:

   $config['enable_query_strings'] = FALSE;
   $config['controller_trigger'] = 'c';
   $config['function_trigger'] = 'm';

If you change “enable_query_strings” to TRUE this feature will become
active. Your controllers and functions will then be accessible using
the “trigger” words you’ve set to invoke your controllers and methods:

   index.php?c=controller&m=method

Note:

  If you are using query strings you will have to build your own URLs,
  rather than utilizing the URL helpers (and other helpers that
  generate URLs, like some of the form helpers) as these are designed
  to work with segment based URLs.
