我正在尝试为我的主干和瘦Web服务器配置htaccess。
以下是我的根网址:mysite.com/myproject/
以下是我如何组织目录:
server.php
,我使用Slim框架,并定义我的'routes'data
js
我想做mysite.com/myproject/post
s之类的事情来获取我的帖子的完整列表
或mysite.com/myproject/post/:id
获得一个帖子
我知道我可以使用重定向来“模拟”不存在的网址。
从理论上讲,如果我尝试mysite.com/posts
,Apache / .htaccess
会重定向到server.php
,我的“路由”会按照我想要的方式执行,并将结果返回到主干网。
但无论我尝试过什么,似乎都有效。
修改
我找到了解决方案的一部分。
我将htaccess和server.php文件移动到数据导向器中。
这是我的server.php文件
<?php
require_once("Slim/Slim.php");
$app = new Slim();
$app->get('/posts','getPosts');
$app->get('/post/:id','getPost');
$app->run();
function getPosts() { echo "Hello world, get post list"; }
function getPost($id) { echo "Hello world, get one post = ".$id; }
?>
这是我的骨干收集声明
window.PostList = Backbone.Collection.extend({
model : Post,
url:"data/posts",
initialize : function() {
console.log ("collection created.")
}
});
和.htaccess文件
RewriteEngine On
RewriteBase /myproject/data
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ server.php [QSA,L]
在fetch method
主干上,请求已发送至http://mysite.com/myproject/data/posts
我可以看到响应控制台Hello world, get post list
但是我不能像mysite/myproject/posts
那样做请求
RewriteBase
的值是多少? backbone collection
的哪个值?
答案 0 :(得分:0)
您需要做的是为mysite.com/posts
而不是301或302重定向创建rewrite rule。
所以你要让你的服务器重写mysite.com/posts
到server.php。这种方式/posts
仍然是网址。
然后你初始化你的Backbone路由器开始并知道如何处理/posts
var my_router = new (Backbone.Router.extend())();
my_router.route('/path/:id', show_post);
Backbone.history.start({pushState: true, root: '/});
或类似的东西。
诀窍在于浏览器中的URL需要匹配Backbone被告知路由的位置。之后将不再从您的服务器调用路由,但如果必须重新加载或从头开始进入,您应该支持它们。
处理此问题的最佳方法是实际使您的重写规则类似于:
RewriteRule ^/posts/(.*?) server.php?post=$1 [L,R]
(或者某些内容取决于server.php
脚本的工作方式以及您希望网址结构如何工作)。