I think you just need to change your last line:
RewriteRule ^(.*)$ /blah/index.php?/$1 [L]
I do not have much experience with CodeIgniter, but in general, the framework wants to push all requests through the central controller (index.php), and then parse the request URL inside.
EDIT: just updated my answer with an example from here: http://codeigniter.com/wiki/mod_rewrite/ , this should be the way CodeIgniter wants it.
UPDATE: you should probably duplicate RewriteConds for the second RewriteRule, they only apply to the first:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /blah/index.php/$1 [L]
source share