<?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 */
$route['default_controller'] = 'pelican/public_root';

$route['^archive$'] = 'pelican/public_root/archives';
$route['^(author|a)$'] = 'pelican/public_root/authors';
$route['^(blog|b)$'] = 'pelican/public_root/blog';
$route['^(category|c)$'] = 'pelican/public_root/categories';
$route['^gitles$'] = 'pelican/public_gitles';
$route['^(home|h)$'] = 'pelican/public_root/index';
$route['^(/|index|i)$'] = 'pelican/public_root/index';
$route['^(tag|t)$'] = 'pelican/public_root/tags';

$route['^(author|a)/(.+)'] = 'pelican/public_author/$2';
$route['(blog|b)/(.+)'] = 'pelican/public_blog/$2';
$route['^(category|c)/(.+)'] = 'pelican/public_category/$2';
$route['^(draft|d)/(.+)'] = 'pelican/public_draft/$2';

$route['(^about$|page/about)'] = 'pelican/public_page/about';
$route['(^ftp$|page/ftp)'] = 'pelican/public_page/ftp';
$route['(^git$|page/git)'] = 'pelican/public_page/git';
$route['(^invite$|page/invite)'] = 'invite/view/invite';
$route['(^mail$|page/mail)'] = 'pelican/public_page/mail';

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