注意:这个问题也可以被理解为:
如何在Java中支持不带哈希标记的客户端MVC框架的书签功能。
我正在将使用hashtags
的angular应用程序转换为使用html5mode
的应用程序。 我已成功设置了
$locationProvider.html5Mode(true);
所有从落地页(index.html)的链接都能正常工作。
问题是,如果直接引用部分URL,则会得到404错误,这很自然,因为服务器端点定义与客户端定义的路由没有耦合。
因此,在没有HTML5的情况下,我们得到了非SEO友好的哈希标记,但是有了它,我们无法收藏除落地页(引导angular的页面)以外的任何东西。
如果首先请求默认落地页(index.html),例如htpp://mydomain.example/,为什么它有效:
- 浏览器从服务器请求index.html
- 服务器返回index.html,浏览器加载angular框架
- URL更改被发送到客户端路由器,并加载适当的部分/ s。
如果直接从浏览器请求(例如)http://mydomain.example/foo
,为什么它不起作用:
- 浏览器从服务器请求mydomain/foo。
- 资源不存在
- 服务器返回404
这个故事中缺少一些东西,我不知道是什么。这里是我所能看到的唯一两个答案......
- 这是设计如此。 这就是它应该工作的方式吗?用户必须始终在客户端MVC框架的引导页面上(通常是index.html),然后从那里导航。这不是理想的,因为无法保存状态,也没有方法可以收藏......更不用说爬行了。
- 服务器解决方案。 是否可以通过服务器端技巧解决这个问题?例如,在所有请求上,返回index.html并立即使用其他上下文调用路由器。如果是这样,这与AngularJS完全是客户端的目标相违背,并且似乎是一种hack。