summaryrefslogtreecommitdiffstats
path: root/user_guide_src/source/general/routing.rst
diff options
context:
space:
mode:
Diffstat (limited to 'user_guide_src/source/general/routing.rst')
-rw-r--r--user_guide_src/source/general/routing.rst133
1 files changed, 133 insertions, 0 deletions
diff --git a/user_guide_src/source/general/routing.rst b/user_guide_src/source/general/routing.rst
new file mode 100644
index 000000000..45950fc11
--- /dev/null
+++ b/user_guide_src/source/general/routing.rst
@@ -0,0 +1,133 @@
+###########
+URI Routing
+###########
+
+Typically there is a one-to-one relationship between a URL string and
+its corresponding controller class/method. The segments in a URI
+normally follow this pattern::
+
+ example.com/class/function/id/
+
+In some instances, however, you may want to remap this relationship so
+that a different class/function can be called instead of the one
+corresponding to the URL.
+
+For example, lets say you want your URLs to have this prototype:
+
+example.com/product/1/
+example.com/product/2/
+example.com/product/3/
+example.com/product/4/
+
+Normally the second segment of the URL is reserved for the function
+name, but in the example above it instead has a product ID. To overcome
+this, CodeIgniter allows you to remap the URI handler.
+
+Setting your own routing rules
+==============================
+
+Routing rules are defined in your application/config/routes.php file. In
+it you'll see an array called $route that permits you to specify your
+own routing criteria. Routes can either be specified using wildcards or
+Regular Expressions
+
+Wildcards
+=========
+
+A typical wildcard route might look something like this::
+
+ $route['product/:num'] = "catalog/product_lookup";
+
+In a route, the array key contains the URI to be matched, while the
+array value contains the destination it should be re-routed to. In the
+above example, if the literal word "product" is found in the first
+segment of the URL, and a number is found in the second segment, the
+"catalog" class and the "product_lookup" method are instead used.
+
+You can match literal values or you can use two wildcard types:
+
+**(:num)** will match a segment containing only numbers.
+ **(:any)** will match a segment containing any character.
+
+.. note:: Routes will run in the order they are defined. Higher routes
+ will always take precedence over lower ones.
+
+Examples
+========
+
+Here are a few routing examples::
+
+ $route['journals'] = "blogs";
+
+A URL containing the word "journals" in the first segment will be
+remapped to the "blogs" class.
+
+::
+
+ $route['blog/joe'] = "blogs/users/34";
+
+A URL containing the segments blog/joe will be remapped to the "blogs"
+class and the "users" method. The ID will be set to "34".
+
+::
+
+ $route['product/(:any)'] = "catalog/product_lookup";
+
+A URL with "product" as the first segment, and anything in the second
+will be remapped to the "catalog" class and the "product_lookup"
+method.
+
+::
+
+ $route['product/(:num)'] = "catalog/product_lookup_by_id/$1";
+
+A URL with "product" as the first segment, and a number in the second
+will be remapped to the "catalog" class and the
+"product_lookup_by_id" method passing in the match as a variable to
+the function.
+
+.. important:: Do not use leading/trailing slashes.
+
+Regular Expressions
+===================
+
+If you prefer you can use regular expressions to define your routing
+rules. Any valid regular expression is allowed, as are back-references.
+
+.. note:: If you use back-references you must use the dollar syntax
+ rather than the double backslash syntax.
+
+A typical RegEx route might look something like this::
+
+ $route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
+
+In the above example, a URI similar to products/shirts/123 would instead
+call the shirts controller class and the id_123 function.
+
+You can also mix and match wildcards with regular expressions.
+
+Reserved Routes
+===============
+
+There are two reserved routes::
+
+ $route['default_controller'] = 'welcome';
+
+This route indicates which controller class should be loaded if the URI
+contains no data, which will be the case when people load your root URL.
+In the above example, the "welcome" class would be loaded. You are
+encouraged to always have a default route otherwise a 404 page will
+appear by default.
+
+::
+
+ $route['404_override'] = '';
+
+This route indicates which controller class should be loaded if the
+requested controller is not found. It will override the default 404
+error page. It won't affect to the show_404() function, which will
+continue loading the default error_404.php file at
+application/errors/error_404.php.
+
+.. important:: The reserved routes must come before any wildcard or
+ regular expression routes.