Angular HTML5 URL - 服务器配置



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

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

在服务器端也必须进行一些配置 - 正如我所理解的那样,应该配置 URL 请求,因此内部带有 ng-app 的页面(起始页面 - 例如 index.html)应该交付给客户端。不包括提供静态资源的URL(CSS,images,AngularJS部分等)和用于CRUD的URL(例如RESTful服务URL)。

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

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

多谢!

在 Spring Boot 中,您可以像这样配置一个 catch-all 视图控制器:

@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 )并替换您自己的资源处理。

基本上,

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

至于另一个问题,有些网站使用像api.example.com这样的子域,有些网站使用像example.com/api这样的路径。这主要不是问题,但如果使用子域,则可能需要配置 CORS。

最新更新