100 lines
3.3 KiB
ReStructuredText
100 lines
3.3 KiB
ReStructuredText
################
|
|
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. |