Let's say we are writing a module named "vacations" that will display information about tourist destinations. Sometimes it's desirable to display your urls like: site.com/bahamas instead of site.com/vacations/bahamas. So here's how you can do that in more than one module…
In the main application route file you will need to change one line. Open
system/cms/config/routes.php and set
$route['404_override'] to ‘vacations’ or whatever your module name is. By default it is set to ‘pages’ in PyroCMS.
Now when a visitor tries to view the page called site.com/contact he will get that page just like usual if it exists. But when he visits site.com/bahamas CodeIgniter will first turn the request over to the default controller (pages) which attempts to find a page with that uri. When no page is found it continues on to the 404 handler which is now our ‘vacations’ module. Now we have an opportunity to retrieve information about ‘bahamas’ from the database and display it. Everything works as if “vacations” was set as the default module.
However since our module is set as the
404_override it’s our responsibility to show a 404 when no information is found to match the uri segment within our module. This can be done by using
I’ve found that this works quite well and the only “waste” is the one query that the Pages (or default) module makes to check for a page with that uri.