【发布时间】: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