我正在用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会添加“/”,然后在服务器中,它会被重定向。