blob: 421f513018637b8ebc6cbbe59b6f83d6c6bc6f09 [file] [log] [blame]
Derek Allard2067d1a2008-11-13 22:59:24 +00001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3<head>
4
5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6<title>CodeIgniter URLs : CodeIgniter User Guide</title>
7
8<style type='text/css' media='all'>@import url('../userguide.css');</style>
9<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
10
11<script type="text/javascript" src="../nav/nav.js"></script>
12<script type="text/javascript" src="../nav/prototype.lite.js"></script>
13<script type="text/javascript" src="../nav/moo.fx.js"></script>
14<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
15
16<meta http-equiv='expires' content='-1' />
17<meta http-equiv= 'pragma' content='no-cache' />
18<meta name='robots' content='all' />
19<meta name='author' content='ExpressionEngine Dev Team' />
20<meta name='description' content='CodeIgniter User Guide' />
21
22</head>
23<body>
24
25<!-- START NAVIGATION -->
26<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
27<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
28<div id="masthead">
29<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
30<tr>
Pascal Kriete1f622292011-04-07 12:06:51 -040031<td><h1>CodeIgniter User Guide Version 2.0.2</h1></td>
Derek Allard2067d1a2008-11-13 22:59:24 +000032<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
33</tr>
34</table>
35</div>
36<!-- END NAVIGATION -->
37
38
39<!-- START BREADCRUMB -->
40<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
41<tr>
42<td id="breadcrumb">
43<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
44<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
45URLS
46</td>
47<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
48</tr>
49</table>
50<!-- END BREADCRUMB -->
51
52<br clear="all" />
53
54
55<!-- START CONTENT -->
56<div id="content">
57
58
59<h1>CodeIgniter URLs</h1>
60
Derek Jones4b9c6292011-07-01 17:40:48 -050061<p>By default, URLs in CodeIgniter are designed to be search-engine and human friendly. Rather than using the standard "query string"
Derek Allard2067d1a2008-11-13 22:59:24 +000062approach to URLs that is synonymous with dynamic systems, CodeIgniter uses a <strong>segment-based</strong> approach:</p>
63
64<code>example.com/<var>news</var>/<dfn>article</dfn>/<samp>my_article</samp></code>
65
66<p class="important"><strong>Note:</strong> Query string URLs can be optionally enabled, as described below.</p>
67
68<h2>URI Segments</h2>
69
70<p>The segments in the URL, in following with the Model-View-Controller approach, usually represent:</p>
71
72<code>example.com/<var>class</var>/<dfn>function</dfn>/<samp>ID</samp></code>
73
74<ol>
75<li>The first segment represents the controller <strong>class</strong> that should be invoked.</li>
76<li>The second segment represents the class <strong>function</strong>, or method, that should be called.</li>
77<li>The third, and any additional segments, represent the ID and any variables that will be passed to the controller.</li>
78</ol>
79
80<p>The <a href="../libraries/uri.html">URI Class</a> and the <a href="../helpers/url_helper.html">URL Helper</a>
Derek Jones4b9c6292011-07-01 17:40:48 -050081contain functions that make it easy to work with your URI data. In addition, your URLs can be remapped using the
Derek Allard2067d1a2008-11-13 22:59:24 +000082<a href="routing.html">URI Routing</a> feature for more flexibility.</p>
83
84
85
86<h2>Removing the index.php file</h2>
87
88<p>By default, the <strong>index.php</strong> file will be included in your URLs:</p>
89
90<code>example.com/<var>index.php</var>/news/article/my_article</code>
91
92<p>You can easily remove this file by using a .htaccess file with some simple rules. Here is an example
93 of such a file, using the "negative" method in which everything is redirected except the specified items:</p>
94
95<code>RewriteEngine on<br />
96RewriteCond $1 !^(index\.php|images|robots\.txt)<br />
97RewriteRule ^(.*)$ /index.php/$1 [L]</code>
98
99<p>In the above example, any HTTP request other than those for index.php, images, and robots.txt is treated as
100a request for your index.php file.</p>
101
102
103<h2>Adding a URL Suffix</h2>
104
105<p>In your <dfn>config/config.php</dfn> file you can specify a suffix that will be added to all URLs generated
Derek Jones4b9c6292011-07-01 17:40:48 -0500106by CodeIgniter. For example, if a URL is this:</p>
Derek Allard2067d1a2008-11-13 22:59:24 +0000107
108<code>example.com/index.php/products/view/shoes</code>
109
110<p>You can optionally add a suffix, like <kbd>.html</kbd>, making the page appear to be of a certain type:</p>
111
112<code>example.com/index.php/products/view/shoes.html</code>
113
114
115<h2>Enabling Query Strings</h2>
116
117<p>In some cases you might prefer to use query strings URLs:</p>
118
119<code>index.php?c=products&amp;m=view&amp;id=345</code>
120
121<p>CodeIgniter optionally supports this capability, which can be enabled in your <dfn>application/config.php</dfn> file. If you
122open your config file you'll see these items:</p>
123
124<code>$config['enable_query_strings'] = FALSE;<br />
125$config['controller_trigger'] = 'c';<br />
126$config['function_trigger'] = 'm';</code>
127
Derek Jones4b9c6292011-07-01 17:40:48 -0500128<p>If you change "enable_query_strings" to TRUE this feature will become active. Your controllers and functions will then
Derek Allard2067d1a2008-11-13 22:59:24 +0000129be accessible using the "trigger" words you've set to invoke your controllers and methods:</p>
130
131<code>index.php?c=controller&amp;m=method</code>
132
133<p class="important"><strong>Please note:</strong> If you are using query strings you will have to build your own URLs, rather than utilizing
134the URL helpers (and other helpers that generate URLs, like some of the form helpers) as these are designed to work with
135segment based URLs.</p>
136
137
138</div>
139<!-- END CONTENT -->
140
141
142<div id="footer">
143<p>
144<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
145<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
146Next Topic:&nbsp;&nbsp;<a href="controllers.html">Controllers</a></p>
Derek Jones898949f2011-01-28 07:42:16 -0600147<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
Derek Allard2067d1a2008-11-13 22:59:24 +0000148</div>
149
150</body>
adminb0dd10f2006-08-25 17:25:49 +0000151</html>