0

上下文: 我有 Cakephp v2.3,我正在运行 XAMPP。我的目录结构是这样的:

C:\xampp\htdocs\cakephp\app\webroot

我有一个位于 ..\xampp\htdocs 的 .htaccess 文件,它重定向到 cakephp(所以基本上我可以输入 localhost,它会将我重定向到 localhost/cakephp)

这可能是我问题的根源,但这是我能够让蛋糕工作的唯一方法。

鉴于此,一切正常,直到...通过 SSL 使用 Ajax 发布。

问题: Ajax 请求源自一个 https 页面并发布到另一个 https 页面(因此这不是域问题)。问题的表现是 Post 更改为“Get”并删除已发布的数据。如果我将请求设为“获取”,它工作正常(但我不想这样做,因为它在最真实的意义上发布数据)。如果我让这两个动作都使用 http 它可以工作。我相信这种重定向正在发生,因为 Apache 正在将“/action”重写为“/cakephp/action”

令人困惑的是: 我在过滤器之前在 CakePhp 中进行了调试,当我在该方法(beforeFilter)中返回时,我的客户端开发工具说请求是 Post,所有数据都存在,服务器响应是我的调试行。当我将返回作为目标操作的第一行时,问题就显现出来了(IE:客户端工具将请求显示为没有数据的 Get,并且发起程序是目标操作而不是 jQuery 命令)。

这让我很困惑,因为一旦它进入 beforeFilter 我会假设 Apache 不再重定向它。而且我还假设,根据 CakeBook 文档,在 beforeFilter 完成之后调用的下一个方法是目标 Action。但是由于某种原因,在 beforeFilter 完成和 targetAction 开始请求之间被重定向到 /cakephp/action

相关代码:

.htaccess 在 ..\xampp\htdocs

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ cakephp/app/webroot/    [L]
   RewriteRule    (.*) cakephp/app/webroot/$1 [L]
</IfModule>

提前感谢任何勇敢的帮助者!

4

1 回答 1

0

经过一段时间并玩弄(并修改其他代码段)后,我发现了问题的根源。

Xampp 正在重定向,但真正的问题是 cakePhp 的 CSRF 令牌验证。因为我的 AJAX 请求(而且我没有序列化生成的表单)没有 csrf 令牌。

这已通过添加解决

$this->Security->csrfCheck = false;
$this->Security->validatePost = false;

在我的控制器中。显然,我希望验证这些请求,但这就是我能够确定实际问题的方式。

Cake 可能应该更好地宣传这个案例,但无论如何,如果其他人遇到类似情况,这就是解决方案。

祝你好运!

于 2013-11-18T20:49:30.873 回答