Вопрос: Русскоязычные ЧПУ в CodeIgniter?

Лучший ответ:
можно перенаправлять все запросы с русскими буквами на контроллер, который их будет разбирать

$route['([-_.,a-z0-9а-я/]+)'] = "router/$1";

да, и еще нужно расширить модуль Routes, т.к. там по умолчанию нет поддержки UTF. Сохраняем следующее в application/core/MY_Router.php

<?php

class MY_Router extends CI_Router
{

/**
 * Parse Routes
 *
 * This function matches any routes that may exist in
 * the config/routes.php file against the URI to
 * determine if the class/method need to be remapped.
 *
 * @access private
 * @return void
 */
 function _parse_routes()
 {
 // Turn the segment array into a URI string
 $uri = implode('/', $this->uri->segments);

// Is there a literal match? If so we're done
 if (isset($this->routes[$uri]))
 {
 return $this->_set_request(explode('/', $this->routes[$uri]));
 }

// Loop through the route array looking for wild-cards
 foreach ($this->routes as $key => $val)
 {
 // Convert wild-cards to RegEx
 $key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
 // ADDED STRING
 $uri = urldecode($uri);
 // Does the RegEx match?
 if (preg_match('#^'.$key.'$#ui', $uri))
 {
 // Do we have a back-reference?
 if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE)
 {
 $val = preg_replace('#^'.$key.'$#ui', $val, $uri);
 }

return $this->_set_request(explode('/', $val));
 }
 }

// If we got this far it means we didn't encounter a
 // matching route so we'll set the site default route
 $this->_set_request($this->uri->segments);
 }

}

?>

Худший ответ:
Если mod_rewrite пугает, то самое простое это ErrorDocument.
В файле .htaccess пишем:ErrorDocument 404 /404.phpа, вот с этим файликом можно поиграться:
404.php<?php
function robots($host)
    {
    header("$_SERVER[SERVER_PROTOCOL] 200 OK");
    header("Content-Type: text/plain");
    $host=strtolower($host);
    echo "Host: $host\r\n";
    exit();
    }

function favicon($old=false)
    {
    header("$_SERVER[SERVER_PROTOCOL] 200 OK");
    if ($old) header("Content-Type: image/x-icon"); else
      header("Content-Type: image/vnd.microsoft.icon");
    // "image/ico", "image/icon", "text/ico", "application/ico" => ERRORS!!
    $favicon
     ="AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAA"
     ."AAAwAAAAAAAAAAAAAAAAAAAAAAAAAAEAgQA/IIEAPTy5AD8+vQA/P"
     ."r8AAQC/AD89uwA/P78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
     ."AAAAAAAAAAAABEREQAAAAAREXIREQAAAREXNzcREAAREXd3d3cRAB"
     ."EXd3d3d3EBERd3d3dhERERd3cXcRERERF3cRd3EREVVXdVd3d1VVV"
     ."Vd1V3d3VVVVV3VXd3d1VQVVdVd3d3VQBVd1V3d3VVAAV3VXd3dVAA"
     ."AFVVVHd1AAAAAFVVVQAAD4HzsA4Ac7AMADAACAAQAAgAEAAAAAAAA"
     ."AAAAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAwAMAAOAHAAD4HwAA";
    echo base64_decode($favicon);
    }

if (strpos($REQUEST_URI,"robots.txt"))
  robots($HTTP_HOST);

if (strpos($REQUEST_URI,"favicon.ico"))
  favicon(true);// favicon();

echo "<xmp>";
print_r($GLOBALS);он отдает «грамотный» robots.txt и симпатичненькую «фавиконку» favicon.ico
На все остальные страницы он печатает дамп переменных среды PHP.
Как обрабатывать значения переменных — дело вкуса.
По крайней мере, все русско-язычные чпу-шки будут гарантированно проходить через этот скрипт.
Разумеется этот скрипт можно (и нужно) допилить до кондиции под собственные задачи.