【问题标题】:Angular HTML5 URLs - Server configurationAngular HTML5 URL - 服务器配置
【发布时间】:2015-08-31 18:41:26
【问题描述】:

我读到 AngularJS 默认使用 hashbang URL——但这不是优势,因此应该使用 HTML5 URL。 为了在客户端配置此行为,必须执行以下操作:

...
$locationProvider.html5Mode(true);
...

在服务器端,还必须进行一些配置——据我所知,应该配置 URL 请求,因此应该将带有 ng-app 的页面(起始页面 - 例如 index.html)传递给客户端。不包括提供静态资源(CSS、图像、AngularJS 部分,...)的 URL 和用于 CRUD 的 URL(例如 RESTful 服务 URL)。

我的问题不是如何在服务器端调整这种行为(例如,对于内部带有嵌入式服务器的字符串启动)?

另一个问题是,您是否在我们的 AngularJS 应用程序中区分静态资源(例如 .../static/..)和 CRUD URL(例如 .../database/...)?

非常感谢!

【问题讨论】:

  • 如果您使用 apache 来提供资源,这可能会有所帮助 -- stackoverflow.com/questions/22739455/…
  • 感谢您的回答 - 我正在使用 Spring Boot,并且我的应用程序前面没有 apache。只有 Spring Boot 也有可能吗?
  • 抱歉,不知道spring boot,你可能还是想使用网络服务器来处理静态资源,上面的解决方案可以解决这个问题。

标签: angularjs spring spring-boot


【解决方案1】:

在 Spring Boot 中,您可以像这样配置一个包罗万象的视图控制器:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.setOrder(Ordered.LOWEST_PRECEDENCE);
        registry.addViewController("/**").setViewName("forward:/index.html");
    }
}

这会将所有未处理的请求转发到 index.html。 setOrder(Ordered.LOWEST_PRECEDENCE) 用于确保这种包罗万象的转发仅在没有找到其他路由后才适用。

但是,现在所有资源查找也都通过此视图控制器进行路由(因为 WebMvcAutoConfiguration 在应用默认资源处理程序之前会检查路径模式是否存在)。

一种可能的解决方法是在application.properties 中设置静态路径模式以包括对文件扩展名的检查:

spring.mvc.static-path-pattern = /**.*

这仅在您的角度路线不包含任何扩展时才有效。 另一种方法是完全禁用 spring boot 的资源处理 (spring.resources.addMappings = false) 并替换为您自己的。

【讨论】:

    【解决方案2】:

    基本上,您希望为所有404s 提供/index.html(您的Angular 应用程序),请求接受值为text/html。 Angular 将接上路线并按预期运行。如果可以,请尝试在 Web 服务器级别处理此问题,这将比在您使用的任何框架中处理它更有效。

    至于另一个问题,有些网站使用api.example.com 之类的子域,而有些网站使用example.com/api 之类的路径。大多数情况下都不是问题,但如果您使用子域,您可能必须配置 CORS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多