我正在尝试重写我的网址,从/ 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
,就可以了。
如果我能提供更多信息,请与我们联系。谢谢!
答案 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解决了这个问题。