【问题标题】:Backbone and slim framework redirect route htacces主干和苗条框架重定向路由 htaccess
【发布时间】:2012-12-04 17:43:25
【问题描述】:

我正在尝试为我的骨干网和纤薄的 Web 应用配置 htaccess。

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

这是我组织目录的方式:

  • server.php,我使用 Slim 框架,并定义我的“路线”
  • 一个包含名为data的Slim框架的目录
  • 一个包含我的 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 的值是多少?

【问题讨论】:

  • 通常你会在 Apache 中配置一个VirtualHost 指令,但是虚拟主机配置不能在.htaccess 中定义。您是否有权修改服务器配置 (httpd.conf)?见:httpd.apache.org/docs/2.2/vhosts/examples.html
  • 感谢回复,但不,我无法访问 httpd.conf。我正在尝试这个,因为我在 stackoverflow 上关注这个答案bit.ly/qVSQgx
  • 我正在使用本教程 bit.ly/Zdb3Iv 并用主干的 CRUD 方法替换 jquery ajax 调用。

标签: javascript apache .htaccess backbone.js slim


【解决方案1】:

听起来您需要做的是为mysite.com/posts 创建一个rewrite rule,而不是301 或302 重定向。

所以你会让你的服务器将mysite.com/posts 重写为server.php。这样/posts 仍然是 URL。

然后您将初始化您的 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 脚本的工作方式以及您希望 URL 结构的工作方式)。

【讨论】:

  • 我会尽快试试这个。在主干中,如果我像这样设置我的路线'/myproject/server.php/post',它就像一个魅力。但我认为那样做很脏。这就是为什么我会用 '/myproject/post' 替换 '/myproject/server.php/post'
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
相关资源
最近更新 更多