summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sturgeon <email@philsturgeon.co.uk>2010-12-15 16:18:16 +0100
committerPhil Sturgeon <email@philsturgeon.co.uk>2010-12-15 16:18:16 +0100
commit23174a64277cad04c89d943fa65694299f7424d6 (patch)
tree7f8cb3089d91d3fdc53ec932f7132a4ab8ef1db7
parentfb5523855cb0592abe8e8720d7019fa82acfb054 (diff)
['404_override'] can now take methods and URI segments, not just a controller name. This is useful for 404 pages on errors/page_missing or /pages/view/404.
-rw-r--r--application/config/routes.php9
-rw-r--r--system/core/Router.php14
2 files changed, 14 insertions, 9 deletions
diff --git a/application/config/routes.php b/application/config/routes.php
index 614462fd9..5f9a58343 100644
--- a/application/config/routes.php
+++ b/application/config/routes.php
@@ -23,16 +23,23 @@
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
-| There is one reserved routes:
+| There area two reserved routes:
|
| $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
+|
+| $route['404_override'] = 'errors/page_missing';
+|
+| This route will tell the Router what URI segments to use if those provided
+| in the URL cannot be matched to a valid route.
+|
*/
$route['default_controller'] = "welcome";
+$route['404_override'] = '';
/* End of file routes.php */
diff --git a/system/core/Router.php b/system/core/Router.php
index 9276800c3..79a8b4fcc 100644
--- a/system/core/Router.php
+++ b/system/core/Router.php
@@ -270,19 +270,17 @@ class CI_Router {
// If we've gotten this far it means that the URI does not correlate to a valid
// controller class. We will now see if there is an override
- if (isset($this->routes['404_override']) AND $this->routes['404_override'] != '')
+ if (!empty($this->routes['404_override']))
{
- if (strpos($this->routes['404_override'], '/') !== FALSE)
- {
- $x = explode('/', $this->routes['404_override']);
+ $x = explode('/', $this->routes['404_override']);
- $this->set_class($x[0]);
- $this->set_method($x[1]);
+ $this->set_class($x[0]);
+ $this->set_method(isset($x[1]) ? $x[1] : 'index');
- return $x;
- }
+ return $x;
}
+
// Nothing else to do at this point but show a 404
show_404($segments[0]);
}