Оставлю это здесь, дабы не забыть. Надоело перекапывать google на эту тему. Есть несколько методов реализовать ЧПУ в контексте фреймворка Yii. Самый простой, поставить Apache и использовать его mod_rewrite с вот такими правилами:
AddDefaultCharset UTF-8
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Но Apache прожорлив, монструозен и не всегда нужен. В своих поделках я использую lighttpd.
Включим mod_rewrite, раскоментировав строчку mod_rewrite. Должно получится так:
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_rewrite",
)
В конфигурации виртуального хоста делаем так:
$HTTP["host"] =~ "example.com" {
server.document-root = "/var/www"
url.rewrite-if-not-file = (
".*\?(.*)" => "index.php?$1",
"." => "index.php"
)
}
Или так (нужно установить и включить lighttpd-mod-magnet и lua):
$HTTP["host"] =~ "example.com" {
server.document-root = "/var/www"
magnet.attract-physical-path-to = ( "/etc/lighttpd/rewrite.lua" )
}
Собственно сам rewrite.lua:
function file_exists(path)
local attr = lighty.stat(path)
if (attr) then
return true
else
return false
end
end
if (lighty.env["request.uri"] == "/" or not file_exists(lighty.env["physical.path"])) then
lighty.env["physical.rel-path"] = "/index.php"
lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
end
А если не охота конфигурировать каждый хост, то включаем simple-vhost и делаем примерно так:
$HTTP["host"] !~ "^(example\.com)$" {
simple-vhost.server-root = "/var/www"
simple-vhost.default-host = "example.com"
simple-vhost.document-root = "public_html"
url.rewrite-if-not-file = (
".*\?(.*)" => "index.php?$1",
"." => "index.php"
)
}