Aurelia.js pushState似乎不适用于嵌套路由 - 刷新后静态资源会丢失

时间:2016-02-11 05:12:23

标签: .htaccess single-page-application pushstate aurelia

我的路线:

[domain]/manage
[domain]/manage/clients
[domain]/manage/users

我已将pushState设置为true。

这是我的htaccess:

php_value max_input_vars 10000;
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /index.html
AddType text/css .css

这在我的Angular 1.x应用程序中完美运行。移至Aurelia,它在[domain]/manage级别工作,但不在[domain]/manage/clients级别。所有级别的一切都运行得很好,直到你是一个深入路线的两个节点,你点击刷新,然后突然它完全失败。

我甚至尝试使用具有完全相同结果的节点服务器(spa服务器)。一旦深度超过一级,就无法再找到静态资源。所以它甚至不能引导。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

Aurelia Cheat Cheet告诉你需要:在html文档的头部添加一个基本标记。如果你正在使用JSPM,你还需要使用与你的基本标记相对应的baseURL来配置它。 #39; s href。

<base href="http://www.example.com/page.html">

<script>System.config({baseURL: '/manage'});</script>

您还必须在路由器配置中将pushState设置为true

config.options.pushState = true;

答案 1 :(得分:1)

确保以下一般检查

1.)您的apache / nginx配置正确

Nginx - 无需重写

location /api {
    //some proxy backend
}

location / {
   try_files $uri /index.html;
}

2.确保您的config.js路径是从/(绝对路径)映射

paths: {
    "*": "/dist/*",
    "github:*": "/jspm_packages/github/*",
    "npm:*": "/jspm_packages/npm/*"
}

3.确保index.html使用/(绝对路径)

的路径
<link rel="stylesheet" href="/jspm_packages/npm/font-awesome@4.6.3/css/font-awesome.min.css">

<script src="/jspm_packages/system.js"></script>
<script src="/config.js"></script>

答案 2 :(得分:0)

当您的入口点是嵌套路由并且您正在使用带有角度路由器的pushState配置时,任何后续导入路径相对于当前URL(当时是/现在是/ manage /)似乎存在问题。

经过多次挫折和头疼之后,我发现这可以解决我的问题:

<base href="http://www.example.com/">

(在index.html的头部)

另一个成功的,如果不太可维护的解决方案是将每个路由明确添加到.htaccess:

RewriteRule ^someroute/?$ "\/index\.html" [R=301,L]
RewriteRule ^anotherroute/?$ "\/index\.html" [R=301,L]

答案 3 :(得分:0)

Tjad的答案只缺少一个元素:

如果希望pushState与aurelia和嵌套路由一起使用,则必须添加它。

&#13;
&#13;
<base href="/">
&#13;
&#13;
&#13;

来源:https://github.com/aurelia/documentation/issues/33