How to replace underscores in codeigniter url with dashes?

It really depends on your intention. If you just want to change only one page, then devrooms' solution is the perfect one indeed:

$route['request-guide'] = "request_guide";

But if you want to make this your website's default behavior you should extend your core Router class like this (source: [Using hyphens instead of underscores in CodeIgniter])

  1. Make a new file in 'application/core' and name it 'MY_Router.php'
  2. Insert this code in it:

    <?php
    
    defined('BASEPATH') || exit('No direct script access allowed');
    
    class MY_Router extends CI_Router {
    
        function _set_request ($seg = array())
        {
            // The str_replace() below goes through all our segments
            // and replaces the hyphens with underscores making it
            // possible to use hyphens in controllers, folder names and
            // function names
            parent::_set_request(str_replace('-', '_', $seg));
        }
    
    }
    
    ?>
    

UPDATE (Oct 26, 2015): There's a better way to do this in CodeIgniter 3, as @Thomas Wood mentioned:

$route['translate_uri_dashes'] = TRUE;

The routes config found in

config/routes.php

is your friend here.

A simple

$route['request-guide'] = "request_guide" ;

will do this for you.


Code Ignitor 3 has this in built:

$route['translate_uri_dashes'] = FALSE;

Just change to TRUE and you can use either _ or -.

Documentation