| ################ |
| 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 |
| |
| #. The first segment represents the controller **class** that should be |
| invoked. |
| #. The second segment represents the class **function**, or method, that |
| should be called. |
| #. The third, and any additional segments, represent the ID and any |
| variables that will be passed to the controller. |
| |
| The :doc:`URI Library <../libraries/uri>` and the :doc:`URL Helper |
| <../helpers/url_helper>` contain functions that make it easy to work |
| with your URI data. In addition, your URLs can be remapped using the |
| :doc:`URI Routing <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:: |
| |
| .. code-block:: console |
| |
| 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. |