【发布时间】:2013-10-31 16:01:06
【问题描述】:
背景: 我有 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 at ..\xampp\htdocs
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ cakephp/app/webroot/ [L]
RewriteRule (.*) cakephp/app/webroot/$1 [L]
</IfModule>
提前感谢任何勇敢的帮助者!
【问题讨论】:
-
mod_rewrite一旦请求到达应用程序代码,就会退出游戏,所以如果它会导致重定向,我会感到非常惊讶。组件确实在beforeFilter()和控制器操作之间运行,因此您可能需要检查其中一个是否正在发出重定向。另外我建议更改您的设置,不要在 windows 文件夹中安装 XAMPP,并在htdocs中放弃.htaccess,而是访问包含路径中子目录的应用程序(这应该可以直接使用),甚至更好地使用虚拟主机。 -
抱歉,Xampp 不在 Windows 文件夹中(我的错误)。我只会使用 URL 中的目录路径,但这会弄乱我在生产环境和开发环境之间的 URL 模式,因为 XAMPP 仅在我的本地设置中。并且添加额外的路线不是我想要做的。我宁愿让 Dev 弯曲以匹配生产,反之亦然。我将研究虚拟主机。我对它们不是很熟悉,但这可能是一个解决方案。谢谢!
标签: php ajax apache .htaccess cakephp