<?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['^gitiles$'] = 'pelican/public_gitiles';
$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;
