AngularJS HTML5模式 - 在没有服务器特定更改的情况下,如何使直接链接起作用?

5 浏览
0 Comments

AngularJS HTML5模式 - 在没有服务器特定更改的情况下,如何使直接链接起作用?

注意:这个问题也可以这样问:

如何在Java中支持不带hashbang的客户端MVC框架的书签功能。

我正在将使用hashtags的angular应用程序过渡到使用html5mode的应用程序。我已经成功设置了

$locationProvider.html5Mode(true);

并且所有来自首页(index.html)的链接都正常工作。

问题是,如果直接引用部分URL,我会得到404错误,因为服务器端点定义与客户端定义的路由没有关联。

因此,如果没有HTML5,我们将得到不友好的hashbang,但是有了HTML5,除了首页(引导angular的页面)以外,我们无法添加书签到其他任何页面。

为什么请求默认首页(index.html)时它能工作,例如htpp://mydomain.example/:

  1. 浏览器向服务器请求index.html
  2. 服务器返回index.html,并加载angular框架
  3. URL更改被发送到客户端路由器,并加载适当的部分/部分。

为什么如果直接从浏览器请求(例如)http://mydomain.example/foo时它不工作:

  1. 浏览器向服务器请求mydomain/foo。
  2. 资源不存在
  3. 服务器返回404

这个故事中缺少了一些东西,我只是不知道是什么。这是我能看到的唯一两个答案...

  • 这是设计如此。这是它应该工作的方式吗?用户必须始终首先进入客户端MVC框架的引导页面(通常是index.html),然后在那里导航。这不理想,因为无法保存状态,也没有办法添加书签...更不用说抓取。
  • 服务器解决方案。这是否可以通过服务器端的技巧来解决?例如,在所有请求中,返回index.html并立即使用其他上下文调用路由器。如果是这样,那就违背了AngularJS完全是客户端的目标,而且似乎像个技巧。
0