【问题标题】:Ember.js pushState router takeover Laravel routeEmber.js pushState 路由器接管 Laravel 路由
【发布时间】:2013-08-31 17:14:24
【问题描述】:

我正在开发一个 Laravel/Ember.js 应用程序,其中 Laravel 充当后端框架和 RESTful 数据提供者的一般角色,而 Ember.js 部分用于客户端。

到目前为止,它工作正常。但是我希望 Ember.js 控制一些子 URL。

假设我在 Laravel 中有 /members 路由,它为 Ember 应用程序提供服务,我希望子后续 URL 可以像这样利用带有 Ember 的 pushState:

/members/add/members/edit/1 等.. 而不是 /members#/add/members#/edit/1

使用 Ember,这很容易实现:

App.Router.reopen({
    location: 'history', //instead of 'hash'
    rootURL: '/members'
})

当我点击链接时它工作正常。

但是,当我刷新页面时,Laravel 路由器会使用.htaccess 启动,它会尝试通过公用文件夹中的 laravel 的 index.php 提供每个 url。这是 Laravel 原版.htaccess 文件:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

我不是 Apache URL 重写方面的专家,所以我需要做的是告诉 .htaccess/members 之后的所有内容(/members/add/members/view 等)重写回 /members 路由所以 Ember.js 会接管并适当地重定向。

我试图做这样的事情,但没有成功:

<IfModule mod_rewrite.c>
   Options -MultiViews
   Options +FollowSymLinks
   IndexIgnore */*
   RewriteEngine On

   RewriteCond %{REQUEST_URI} /members
   RewriteRule (.*) members

   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^ index.php [L]
</IfModule>

感谢有关此 url 重写主题的任何帮助。谢谢!

【问题讨论】:

  • 哇。不知道 ember.js 让历史推送状态变得如此简单......今天学到了一个新东西。谢谢(我知道我的评论在这里没有帮助,只是想感谢):)
  • 是的,不用担心。这对于没有其他路由的单页应用很有帮助。
  • 你能找到这个问题的答案吗?

标签: .htaccess mod-rewrite ember.js laravel pushstate


【解决方案1】:

看看:

它对我有用!

再见!

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多