带有XAMPP重定向和丢失Post数据的CakePhp

带有XAMPP重定向和丢失Post数据的CakePhp,php,ajax,apache,.htaccess,cakephp,Php,Ajax,Apache,.htaccess,Cakephp,上下文: 我有Cakephp v2.3,我正在运行XAMPP。因此,我的目录结构是: C:\xampp\htdocs\cakephp\app\webroot 我在..\xampp\htdocs中有一个.htaccess文件,该文件重定向到cakephp(因此基本上我可以键入localhost,它会将我重定向到localhost/cakephp) 这可能是我的问题的根源,但这是我能让蛋糕起作用的唯一方法 考虑到这一点,在。。。通过SSL使用Ajax发布 问题: Ajax请求源于一个https页面并

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

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

我在..\xampp\htdocs中有一个.htaccess文件,该文件重定向到cakephp(因此基本上我可以键入localhost,它会将我重定向到localhost/cakephp)

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

考虑到这一点,在。。。通过SSL使用Ajax发布

问题: Ajax请求源于一个https页面并发布到另一个https页面(因此这不是域问题)。问题的表现形式是Post变为“Get”并删除发布的数据。如果我将请求设置为“Get”,那么它可以正常工作(但我不想这样做,因为它发布的是最真实的数据)。如果我让这两个操作都使用http,它就会工作。我认为之所以发生这种重定向,是因为Apache正在将“/action”重新写入“/cakephp/action”

什么让人困惑: 我在CakePhp before筛选器中进行了调试,当我在该方法(beforeFilter)中放入一个返回值时,我的客户端开发工具说请求是Post的,所有数据都存在,服务器响应是我的调试行。当我将返回作为目标操作的第一行时,问题就会显现出来(即:客户端工具将请求显示为没有数据的Get,而启动器是目标操作,而不是jQuery命令)

这让我感到困惑,因为一旦它进入beforeFilter,我就认为Apache不再重定向它。我还假设,根据CakeBook文档,在beforeFilter完成后调用的下一个方法是目标操作。但由于某些原因,在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>

重新启动发动机
重写规则^$cakephp/app/webroot/[L]
重写规则(*)cakephp/app/webroot/$1[L]

提前感谢所有勇敢的助手

经过一段时间的研究(以及修改其他代码),我发现了问题的根源

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

通过添加

$this->Security->csrfCheck = false;
$this->Security->validatePost = false;
在我的控制器里。显然,我希望这些请求得到验证,但这就是我能够确定实际问题的方式

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


祝你好运

mod_rewrite
一旦请求到达应用程序代码,就会退出游戏,因此如果它会导致重定向,我会非常惊讶。组件确实在
beforeFilter()
和控制器操作之间运行,因此您可能需要检查其中一个组件是否正在发出重定向。另外,我建议更改您的设置,不要在windows文件夹中安装XAMPP,并放弃
htdocs
中的
.htaccess
,而是访问应用程序,包括路径中的子目录(这应该是现成的),或者更好地使用虚拟主机。抱歉,XAMPP不在windows文件夹中(我的错误)。我只想在URL中使用目录路径,但这会打乱生产环境和开发环境之间的URL模式,因为XAMPP仅在本地设置中。我不想增加额外的路线。我宁愿让Dev bend与生产相匹配,而不是相反。我将研究虚拟主机。我对他们不是很熟悉,但这可能是一个解决办法。谢谢