[eluser]Daniel Walton[/eluser]
Ok solved.
If using htaccess to remove index.php (or whatever renamed variant) which I'm assuming you are also, then you are presumably using an .htaccess rule similar to:
Code:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
Please note the "?" in the rewrite rule, this is important.
The core URI library has a function to retrieve the uri string from each incoming request called "_fetch_uri_string()". Within this function it uses a shortcut way of finding the uri string if the URL contains a "?" (remember our .htaccess?)
If you can get away with it, i.e., if your server will support URL's like "http://example.com/index.php/controller", then just remove the question mark from your rewrite rule.
If unfoprtunately your server setup can only understand "http://example.com/index.php?/controller" then you can either extend the core URI library to removes this conditional:
Code:
if (is_array($_GET) AND count($_GET) == 1 AND trim(key($_GET), '/') != '')
{
$this->uri_string = key($_GET);
return;
}
Or just comment it out. The other conditionals should catch the request.
The reason this just doesnt work, for using url_suffixes on an index.php removed root url is that the $_GET key isn't allowed to contain periods, amongst other characters, so a request for "/foo.bar" is actioned as "/foo_bar" hence the 404.
Hope this helps