在nginx上运行的CodeIgniter应用程序上,后置数组始终为空

时间:2011-05-18 18:45:05

标签: codeigniter nginx

我在Ubuntu 11上安装了nginx 1.0.2,php 5.3.5运行FPM / FastCGI。

在我的codeigniter applilcation上我遇到了以下问题。 我有一个简单的登录表单,其中包含用户名和密码字段。当我提交表单时,$ _POST数组为空。那么$ this-> input-> post('username')和$ this-> input-> post('password')。

该应用程序在apache上运行正常。我尝试在一个简单的php文件上创建一个简单的测试表单,$ _POST数据完美地工作。如果需要,我可以提供配置文件。有什么想法吗?

更新: 它终于奏效了。我的vhost配置中有一些重定向导致丢失的帖子数据。可以在此处找到工作vhost配置:http://codeigniter.com/forums/viewthread/90231/#455528

4 个答案:

答案 0 :(得分:1)

我想我现在知道这个问题了。它返回404并处理你的脚本的事实告诉我,error_page正在进行'重写'以获取对/index.php的请求。对非命名位置的error_page会将请求转换为GET,因此error_page 404 /index.php正在对/index.php进行内部重定向,但它正在剥离请求主体(并且缺少=表示error_page目标未覆盖状态代码)。我不确定为什么所有这些ifs都没有执行重定向(如果在nginx中处理真的很奇怪,所以避免它们是个好主意),但我认为如果你的错误页面使用了一个命名位置,那就会保留请求正文并填写$ _POST。尝试将当前的error_page指令替换为:

location @redir {
  rewrite ^ /index.php;
}
error_page 404 = @redir;

答案 1 :(得分:0)

检查这些:

<form method="post">
你正在使用post方法吗?

尝试运行探查器:

$this->output->enable_profiler(TRUE);

在那里看到任何POST输出?

答案 2 :(得分:0)

我使用自己的PHP框架和类似的URI重写作为CI,并且在Nginx服务器上有类似的问题,因为我的表单有如下操作:action =“admin / login / post”,我不得不将它们更改为结束。 php action =“admin / login / post.php”所以它们可以工作,但是这需要你改变你的CI类的URI重写来从uri字符串中替换.php。

答案 3 :(得分:0)

我有类似的问题,我尝试了这里提到的一切。当我想到它时,它非常简单,我没有在表单中命名我的输入变量。我错过了名字参数。

<input type="name" placeholder="Name" name="name">