blob: d678e4a0aad5a3eb1cce0b9183d17049196afc4a [file] [log] [blame]
Derek Jones8ede1a22011-10-05 13:34:52 -05001################
2CodeIgniter URLs
3################
4
5By default, URLs in CodeIgniter are designed to be search-engine and
6human friendly. Rather than using the standard "query string" approach
7to URLs that is synonymous with dynamic systems, CodeIgniter uses a
8**segment-based** approach::
9
10 example.com/news/article/my_article
11
12.. note:: Query string URLs can be optionally enabled, as described
13 below.
14
15URI Segments
16============
17
18The segments in the URL, in following with the Model-View-Controller
19approach, usually represent::
20
21 example.com/class/function/ID
22
Derek Jones8ede1a22011-10-05 13:34:52 -050023#. The first segment represents the controller **class** that should be
24 invoked.
25#. The second segment represents the class **function**, or method, that
26 should be called.
27#. The third, and any additional segments, represent the ID and any
28 variables that will be passed to the controller.
29
Andrey Andreev16a704c2012-11-09 17:25:00 +020030The :doc:`URI Library <../libraries/uri>` and the :doc:`URL Helper
31<../helpers/url_helper>` contain functions that make it easy to work
32with your URI data. In addition, your URLs can be remapped using the
33:doc:`URI Routing <routing>` feature for more flexibility.
Andrey Andreevd1097a12012-11-01 19:55:42 +020034
35Friendly URLs
36=============
37
38As you might guess, since there's a straight relationship between
39URI segments and the controller/method pair that's being called,
40those two determining segments must represent a valid class and
41method name.
42You may however also use dashes in the class/method-representing
43segments, and they will automatically be translated to underscores
44in order to be valid routed segments.
45
46For example::
47
48 example.com/my-settings/change-password/
49
50The above example will route to the ``My_settings`` controller and
51its method ``change_password()``.
Derek Jones8ede1a22011-10-05 13:34:52 -050052
53Removing the index.php file
54===========================
55
56By default, the **index.php** file will be included in your URLs::
57
58 example.com/index.php/news/article/my_article
59
Andrey Andreev16a704c2012-11-09 17:25:00 +020060If your Apache server has *mod_rewrite* enabled, you can easily remove this
CroNiX624010f2012-01-25 14:52:11 -080061file by using a .htaccess file with some simple rules. Here is an example
62of such a file, using the "negative" method in which everything is redirected
63except the specified items:
Derek Jones8ede1a22011-10-05 13:34:52 -050064
Derek Jones9607e732011-10-05 16:42:42 -050065::
66
Repoxed477272011-11-22 11:13:48 +010067 RewriteEngine On
68 RewriteCond %{REQUEST_FILENAME} !-f
69 RewriteCond %{REQUEST_FILENAME} !-d
insign5287f662012-01-09 18:07:34 -020070 RewriteRule ^(.*)$ index.php/$1 [L]
Derek Jones8ede1a22011-10-05 13:34:52 -050071
Repox1f9a40f2011-11-22 11:25:24 +010072In the above example, any HTTP request other than those for existing
Repoxed477272011-11-22 11:13:48 +010073directories and existing files is treated as a request for your index.php file.
Derek Jones8ede1a22011-10-05 13:34:52 -050074
Andrey Andreev16a704c2012-11-09 17:25:00 +020075.. note:: These specific rules might not work for all server configurations.
76
77.. note:: Make sure to also exclude from the above rule any assets that you
78 might need to be accessible from the outside world.
CroNiX624010f2012-01-25 14:52:11 -080079
Derek Jones8ede1a22011-10-05 13:34:52 -050080Adding a URL Suffix
81===================
82
purwandi69116ed2011-10-07 15:27:45 +070083In your **config/config.php** file you can specify a suffix that will be
Derek Jones8ede1a22011-10-05 13:34:52 -050084added to all URLs generated by CodeIgniter. For example, if a URL is
85this::
86
87 example.com/index.php/products/view/shoes
88
purwandi69116ed2011-10-07 15:27:45 +070089You can optionally add a suffix, like **.html,** making the page appear to
Derek Jones8ede1a22011-10-05 13:34:52 -050090be of a certain type::
91
92 example.com/index.php/products/view/shoes.html
93
94Enabling Query Strings
95======================
96
97In some cases you might prefer to use query strings URLs::
98
99 index.php?c=products&m=view&id=345
100
101CodeIgniter optionally supports this capability, which can be enabled in
purwandi69116ed2011-10-07 15:27:45 +0700102your **application/config.php** file. If you open your config file you'll
Derek Jones8ede1a22011-10-05 13:34:52 -0500103see these items::
104
Derek Jones9607e732011-10-05 16:42:42 -0500105 $config['enable_query_strings'] = FALSE;
106 $config['controller_trigger'] = 'c';
107 $config['function_trigger'] = 'm';
Derek Jones8ede1a22011-10-05 13:34:52 -0500108
109If you change "enable_query_strings" to TRUE this feature will become
110active. Your controllers and functions will then be accessible using the
111"trigger" words you've set to invoke your controllers and methods::
112
113 index.php?c=controller&m=method
114
Andrey Andreev16a704c2012-11-09 17:25:00 +0200115.. note:: If you are using query strings you will have to build your own
116 URLs, rather than utilizing the URL helpers (and other helpers
117 that generate URLs, like some of the form helpers) as these are
118 designed to work with segment based URLs.