【问题标题】:Forms are broken in CodeIgniterCodeIgniter 中的表单被破坏
【发布时间】:2011-09-15 17:40:24
【问题描述】:

我正在尝试重写我的网址以从 /controller/method 转到 index.php?/controller/method,这主要是有效的,只是表单无法正确提交。我设置了一些路由,但表单也在非重新路由的 url 上中断。这里有一点上下文。

我已将我的 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 留在其中,那么 URL 看起来像 /index.php/contacts/edit/1,它可以工作。

如果我能提供更多信息,请告诉我。谢谢!

【问题讨论】:

  • 再描述一下“什么都没有发生”。空白页?屏幕错误?同一页面重新加载到位?
  • @Michael 已编辑。发生的事情并不多,否则我可以更有效地调试它。我希望其他人也看到过类似的东西。当然,错误报告已开启。
  • 不确定路由发生了什么,但是如果您在提交表单的方法中执行 print_r($_POST) 会发生什么?
  • 可以显示表单代码吗?仅限action="..."
  • @theazureshadow,实际上确实发生了很多事情 - 很多事情都可以确定问题。检查浏览器调试器(如 Firebug)是否有 HTTP 重定向或状态消息,并检查服务器 php 日志是否有 PHP 错误。

标签: php forms codeigniter url-routing


【解决方案1】:

原来我没有包含的 .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 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2019-02-23
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多