I am trying to rewrite my urls to go from /controller/method to index.php?/controller/method, and that is mostly working, except that forms won’t submit correctly. I have some routing set up, but the forms are also breaking on non re-routed urls. Here’s a little context.
I have moved my index.php out into a separate web folder that is the web root, so there is no chance of exposing application files. I’m not sure whether this would potentially cause this problem, but it’s something slightly unusual about my installation. My directory structure looks like:
+ codeigniter/
+ application/
- models, views, etc
+ system/
+ web/
- .htaccess
- index.php
- css, javascript, images, etc
My .htaccess is pretty simple:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
It seems to work fine on XAMPP for Windows, but it is broken on a basic Ubuntu LAMP stack. When I submit a form, nothing happens. The page that the form directs to loads, but as if the form hadn’t been submitted.
Sorry, one more important piece of information: If I leave the index.php in there, so the urls look like /index.php/contacts/edit/1, it works.
Let me know if I can provide any more information. Thanks!
Turns out a part of the .htaccess that I didn’t include was causing the error to be difficult to find.
I had assumed that this would show a CodeIgniter error page if it reached that block, but it turns out (I assume) that CodeIgniter was valiantly trying to salvage the situation by looking at the path in
$_SERVER, from which it was able to get the page it was supposed to display. However, since the path didn’t exist, none of the $_POST data made it through. In the error log I was seeing this line:Enabling mod_rewrite solved the problem.