I would like to know the simplest solution to changing the underscores of my codeigniter urls to dashes, for seo reasons.
My controllers look like:
publi
Code Ignitor 3 has this in built:
$route['translate_uri_dashes'] = FALSE;
Just change to TRUE
and you can use either _
or -
.
Documentation
Have a look at Codeigniter's custom routing http://codeigniter.com/user_guide/general/routing.html
What you could do is create a custom hook (PST... you need basic CodeIgniter skills): for more information regarding CodeIgniter Hooks - Extending the Framework Core
/*
* the hooks must be enabled from the config file
* replace underscore with dashes (hyphens) for SEO
*/
function prettyurls() {
if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '') {
$newkey = str_replace('-', '_', key($_GET));
$_GET[$newkey] = $_GET[key($_GET)];
unset($_GET[key($_GET)]);
}
if (isset($_SERVER['PATH_INFO']))
$_SERVER['PATH_INFO'] = str_replace('-', '_', $_SERVER['PATH_INFO']);
if (isset($_SERVER['QUERY_STRING']))
$_SERVER['QUERY_STRING'] = str_replace('-', '_', $_SERVER['QUERY_STRING']);
if (isset($_SERVER['ORIG_PATH_INFO']))
$_SERVER['ORIG_PATH_INFO'] = str_replace('-', '_', $_SERVER['ORIG_PATH_INFO']);
if (isset($_SERVER['REQUEST_URI']))
$_SERVER['REQUEST_URI'] = str_replace('-', '_', $_SERVER['REQUEST_URI']);
}
I named the file customhooks.php.
Then add this to the hooks.php file in application/config:
$hook['pre_system'] = array(
'class' => '',
'function' => 'prettyurls',
'filename' => 'customhooks.php',
'filepath' => 'hooks',
'params' => array()
);
You will need to edit your application/config/config.php file to enable hooks
$config['enable_hooks'] = TRUE;
EXTRA:
so that when you use $this->uri->uri_string() it stays hyphenated do the following Creating Core System Classes
class MY_URI extends CI_URI {
function uri_string() {
return str_replace('_', '-', $this->uri_string);
}
}
The routes config found in
config/routes.php
is your friend here.
A simple
$route['request-guide'] = "request_guide" ;
will do this for you.
Open application/config/routes.php and change
$route['translate_uri_dashes'] = TRUE;
That is it you need to do.
Now when you access www.domain.com/request-guide, it will instantiate request_guide controller.
It will work with all controllers with name containing _ (underscore).
You can use this _remap() method to handle such behavior. Place this method in your controllers or create a core controller and place it in.
public function _remap($method, $params = array()){
if(method_exists($this, $method)){
return call_user_func_array(array($this, $method), $params);
}else{
$method = str_replace("-", "_", $method);
if(method_exists($this, $method)){
return call_user_func_array(array($this, $method), $params);
}
}
show_404();
}