表单在CodeIgniter中被破坏

时间:2011-09-15 17:40:24

标签: php forms codeigniter url-routing

我正在尝试重写我的网址,从/ controller /方法转到index.php?/ controller / method,这主要是有效的,除了表单不能正确提交。我有一些路由设置,但表格也打破了非重新路由的网址。这是一个小背景。

我已将index.php移到一个单独的Web文件夹,即web根目录,因此不会暴露应用程序文件。我不确定这是否会导致这个问题,但是我的安装有点不寻常。我的目录结构如下:

+ codeigniter/
  + application/
    - models, views, etc
  + system/
  + web/
    - .htaccess
    - index.php
    - css, javascript, images, etc

我的.htaccess很简单:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

它似乎在XAMPP for Windows上运行良好,但它在基本的Ubuntu LAMP堆栈上被破坏了。当我提交表格时,没有任何反应。表单指向要加载的页面,但好像表单尚未提交。

对不起,还有一条更重要的信息:如果我将index.php留在那里,那么网址看起来像/index.php/contacts/edit/1,就可以了。

如果我能提供更多信息,请与我们联系。谢谢!

1 个答案:

答案 0 :(得分:0)

原来我没有包含的.htaccess的一部分导致很难找到错误。

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

我曾假设如果它到达那个块会显示CodeIgniter错误页面,但事实证明(我猜)CodeIgniter正在试图通过查看$_SERVER中的路径来挽救这种情况,它能够获得它应该显示的页面。但是,由于路径不存在,因此$ _POST数据都没有通过。在错误日志中,我看到了这一行:

[error] File does not exist: /path/to/web/contacts/edit/1

启用mod_rewrite解决了这个问题。