<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
|	example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
|	https://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There are three 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 which controller/method to use if those
| provided in the URL cannot be matched to a valid route.
|
|	$route['translate_uri_dashes'] = FALSE;
|
| This is not exactly a route, but allows you to automatically route
| controller and method names that contain dashes. '-' isn't a valid
| class or method name character, so it requires translation.
| When you set this option to TRUE, it will replace ALL dashes in the
| controller and method URI segments.
|
| Examples:	my-controller/index	-> my_controller/index
|		my-controller/my-method	-> my_controller/my_method
*/
/* Requested URI is empty - https://www.giggi.me */
$route['default_controller'] = 'pelican/index';

/* Requested URI is 'about' - https://www.giggi.me/about */
$route['(^about$|page/about)'] = 'pelican/view/about';

/* Requested URI is 'blog' - https://www.giggi.me/blog */
$route['^blog$'] = 'pelican/view/blog';

/* Requested URI is 'blog' - https://www.giggi.me/blog/foo.html */
$route['^blog/(.+)'] = 'pelican/view/$1';

/* Requested URI is 'category' - https://www.giggi.me/category/bar.html */
$route['^category/(.+)'] = 'pelican/view/$1';

/* Requested URI is 'ftp' - https://www.giggi.me/ftp */
$route['(^ftp$|page/ftp)'] = 'pelican/view/ftp';

/* Requested URI is 'git' - https://www.giggi.me/gerrit */
$route['gerrit'] = 'pelican/view/index';

/* Requested URI is 'git' - https://www.giggi.me/git */
$route['(^git$|page/git)'] = 'pelican/view/git';

/* Requested URI is 'home' - https://www.giggi.me/home */
$route['home'] = 'pelican/index';

/* Requested URI is 'invite' - https://www.giggi.me/invite */
$route['(^invite$|page/invite)'] = 'invite/view/invite';

/* Requested URI is 'login' - https://www.giggi.me/login */
$route['(^login$|page/login)'] = 'login/view/login';

/* Requested URI is 'mail' - https://www.giggi.me/mail */
$route['(^mail$|page/mail)'] = 'pelican/view/mail';

$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
