Backbone和slim框架重定向路由htaccess

时间:2012-12-17 15:48:11

标签: javascript apache .htaccess backbone.js slim

我正在尝试为我的主干和瘦Web服务器配置htaccess。

以下是我的根网址:mysite.com/myproject/

以下是我如何组织目录:

directories

  • server.php,我使用Slim框架,并定义我的'routes'
  • 一个包含名为data
  • 的Slim框架的目录
  • 一个包含名为js
  • 的Backbone应用程序的目录

我想做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的哪个值?

1 个答案:

答案 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脚本的工作方式以及您希望网址结构如何工作)。