我正在用Laravel 4编写一个RESTful api,它将被Backbone.js应用程序使用.
当我使用GIT部署我的代码时,我收到一条消息说:
应用程序目录"public /"被选为DocumentRoot
使用Backbone.js应用程序时,PUT,GET和DELETE请求被正确处理,但是当我尝试发出POST请求时,由于重定向,预检请求(OPTIONS)失败:
请求方法:选项
状态代码: 301永久移动
在控制台上出现此错误:
XMLHttpRequest无法加载
http://MY-DOMAIN.rhcloud.com/projetos/
.请求被重定向到'http://MY-DOMAIN.rhcloud.com/projetos'
,这对于需要预检的跨源请求是不允许的.
这是因为CORS策略:
如果响应的HTTP状态代码为301,302,303,307或308,则
应用缓存和网络错误步骤.
我怎样才能克服这个问题?有没有办法绕过或配置Openshift重定向?
>>>编辑
我在Chrome javascript控制台上收到此错误,因为我的Backbone App仍处于开发阶段.这里是复制问题的步骤:
我有一个全局命名空间"App",我的项目以这种形式组织:App.Models,App.Collections等.
该模型
App.Models.Projeto = Backbone.Model.extend({ defaults : { codigo : '', titulo : '', url : '', status : '' } });
收藏
App.Collections.Projetos = Backbone.Collection.extend({ model : App.Models.Projeto, url : 'http://MY-DOMAIN.rhcloud.com/projetos' });
在控制台上
var projetos = new App.Collections.Projetos; projetos.create({ titulo : "blablabla", codigo : "12jk4h3", url : "example.com", status : 0 });
我可以在集合中获取,编辑和删除模型.我唯一不能做的就是创造一个新的.
最后一件事,我被重定向到的URL是相同的URL,但最后没有"/".
因此,即使集合中的"url"属性设置为http://MY-DOMAIN.rhcloud.com/projetos
它,似乎Backbone添加了一个"/",然后在服务器中,它被重定向.