0

我正在尝试为我的骨干网和苗条的 Webapp 配置 htaccess。

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

这是我组织目录的方式:

目录

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

我想做类似mysite.com/myproject/posts 的事情来获取我的帖子的完整列表或mysite.com/myproject/post/:id获取一篇帖子

我知道我可以使用重定向来“模拟”不存在的 URL。理论上,如果我尝试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

4

1 回答 1

0

听起来您需要做的是创建一个重写规则mysite.com/posts而不是 301 或 302 重定向。

因此,您需要将服务器重写mysite.com/posts为 server.php。这种方式/posts仍然是URL。

然后你会初始化你的主干路由器来启动并知道如何处理/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脚本如何工作以及您希望您的 URL 结构如何工作)。

于 2012-12-17T16:02:35.717 回答