我正在使用最新版本的 Ember.js 开发一个新的仅限客户端的应用程序。有一个 PHP 页面可以构建脚本、css、模板文件等,并将其全部交付到 index.php 中。我正在使用 htaccess 指令,以便将所有请求都重写到/index.php。就我而言,PHP 只是为了方便地打包 Javascript。
目前,浏览器中的路由看起来像这样并且工作得很好。
/#/about
/#/favorites
/#/etc
/#/posts/5/edit
但是,我希望它们看起来像这样 - 这不能正常工作。
/about
/favorites
/etc
/posts/5/edit
第二个选项仍然提供完全相同的客户端代码 - 但它总是命中索引路由处理程序。我以前见过客户端应用程序实现这一点 - 我错过了什么?我需要在 PHP 端有匹配的路由处理程序吗?
编辑:我正在寻找如何解决这个问题的具体答案。网络上充斥着“哦——你就这么做”的信息,让其他人摸不着头脑。
最佳答案
在 Ember.js(版本 1.0.0rc3)中,这可以通过使用 Ember.js location API 来完成。 :
App.Router.reopen({
location: 'history'
});
然后设置 Web 服务器将流量重定向到 Ember 应用程序。
这里举一个具体的例子是一个基本的 Apache
.htaccess
将流量重定向到位于 index.html 中的 Ember 应用程序的文件:RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.html#$1 [L]
如Alex White指出 Apache 2.2.16 及更高版本支持将流量重定向到单个目标的更简单配置:
FallbackResource /index.html
FallbackResource是
mod_dir
的一部分模块和需要 AllowOverride Indexes
要设置。确保彻底测试应用程序路由。一个常见错误是
Uncaught SyntaxError: Unexpected token <
,这是由使用 CSS 和 JS 文件的相对链接引起的。在它们前面加上 /
标记使它们绝对。这个功能是not supported in Internet Explorer <10 .
关于ember.js - 客户端 Javascript 应用程序 - 没有哈希标记的 url 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845048/