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