You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ember非CLI应用(v2.15)中移除URL中的#(哈希)

如何在Ember v2.15非CLI应用中移除URL哈希符号?

好的,针对你在Ember v2.15非CLI应用中移除URL哈希符号的需求,我整理了具体的操作步骤,都是适配这个版本的非CLI架构的:

1. 配置Ember应用的Location类型

在非CLI的Ember应用中,我们需要直接在应用初始化时指定location属性为'history'(默认是'hash')。找到你的应用入口脚本(通常是app.js),修改应用创建的代码:

// 原初始化代码可能是这样的
App = Ember.Application.create();

// 修改为带location配置的版本
App = Ember.Application.create({
  location: 'history'
});

这一步会让Ember切换到HTML5 History API来管理路由,不再依赖URL中的哈希符号。

2. 配置服务器端路由转发

使用history模式后,当用户刷新页面或者直接访问某个子路由(比如/posts/1)时,服务器会尝试寻找对应的物理文件,而这些文件实际上不存在(因为Ember是单页应用),所以会返回404错误。你需要在服务器上配置,让所有路由请求都转发到应用的index.html文件。

常见服务器配置示例:

  • Apache:在项目根目录创建.htaccess文件,添加以下内容:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
  • Nginx:在服务器配置中添加:
location / {
  try_files $uri $uri/ /index.html;
}
  • Node.js(Express):添加中间件处理路由:
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'path/to/your/index.html'));
});

3. 配置<base>标签(可选但关键)

如果你的应用不是部署在域名的根目录下(比如部署在http://yourdomain.com/ember-app/),需要在index.html的<head>中添加<base>标签,指定应用的根路径:

<base href="/ember-app/">

这能确保Ember生成正确的URL路径,避免出现资源加载失败或者路由跳转异常的问题。

额外注意事项

  • 浏览器兼容性:Ember v2.15的history location要求浏览器支持HTML5 History API,现代浏览器(Chrome、Firefox、Edge、IE10+)都能满足需求。
  • 旧链接兼容:如果你的应用中有旧的哈希形式链接(比如/#/posts),Ember会自动将其重定向到非哈希的/posts路径,无需额外处理。

内容的提问来源于stack exchange,提问作者Vipin Dhiman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:30:34