上下文 我有Cakephp v2.3,我正在运行XAMPP。因此我的目录结构是:
C:\ XAMPP \ htdocs中\ cakephp的\应用\根目录
我有一个位于.. \ xampp \ htdocs中的.htaccess文件重定向到cakephp(基本上我可以输入localhost,它会将我重定向到localhost / cakephp)
这可能是我问题的根源,但这是我能够让蛋糕上班的唯一方式。
鉴于此,一切都运行正常UNTIL ...通过SSL发布Ajax。
问题: Ajax请求源自https页面并发布到另一个https页面(因此它不是域问题)。问题的表现是Post更改为“Get”并删除发布的数据。如果我将请求设置为“获取”它可以正常工作(但我不想这样做,因为它是在最真实的意义上发布数据)。如果我使这两个动作都使用http就行了。我相信这种重定向正在发生,因为Apache正在重写“/ action”到“/ cakephp / action”
什么令人困惑: 我在过滤器之前在CakePhp中进行了调试,当我在该方法中放置一个返回(beforeFilter)时,我的客户端开发人员工具说请求是Post,所有数据都存在,服务器响应是我的调试行。当我将返回作为目标操作中的第一行时,问题就会出现(IE:客户端工具将请求显示为没有数据的Get,而启动器是目标操作而不是jQuery命令)。
这让我感到困惑,因为一旦它进入beforeFilter,我会假设Apache不再重定向它。我还假设,根据CakeBook文档,在afterFilter完成之后调用的下一个方法是目标Action。但由于某种原因,在beforeFilter完成和targetAction之间启动请求被重定向到/ cakephp / action
相关代码:
.htaccess at .. \ xampp \ htdocs
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ cakephp/app/webroot/ [L]
RewriteRule (.*) cakephp/app/webroot/$1 [L]
</IfModule>
提前感谢任何勇敢的帮手!
答案 0 :(得分:0)
经过一段时间的游戏(并修改其他代码片段)后,我发现了问题的根源。
Xampp正在重定向,但真正的问题是cakePhp的CSRF令牌验证。因为我的请求AJAX(我没有序列化生成的表单),所以没有csrf令牌。
通过添加
解决了这个问题$this->Security->csrfCheck = false;
$this->Security->validatePost = false;
在我的控制器中。显然,我希望这些请求得到验证,但这就是我能够确定实际问题的方法。
Cake应该可以更好地了解这个案例,但无论如何,如果其他人遇到类似的情况,这就是解决方案。
祝你好运!