在我的Spring Boot应用程序的路径src/main/resources/static
下,我有我的AngularJS 1.5应用程序的来源。使用Grunt我可以将它缩小到src/main/resources/static/dist
进行制作。但是对于开发模式,我使用源代码,因为我不想等待更改的构建过程。
当我检测到应用程序在生产/暂存中运行时,我使用此配置动态使用dist
文件夹:
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Autowired
private Environment environment;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (isProduction() || isStaging()) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/dist/");
} else {
super.addResourceHandlers(registry);
}
}
private boolean isProduction() {
return Arrays.asList(environment.getActiveProfiles()).contains("production");
}
private boolean isStaging() {
return Arrays.asList(environment.getActiveProfiles()).contains("staging");
}
}
这完美无缺。
为了开始关注Angular应用程序的SEO,我在构建过程中添加了grunt-html-snapshots
,以便快照构建到src/main/resources/static/dist/snapshots/
。查看结果结构:
如果我在请求路径中检测到escaped_fragment
,我现在如何重定向到快照?我应该基于嵌入式Tomcat实现一些东西吗?或者在Spring Boot代码中重写一些?在Apache2和嵌入式Tomcat之间的生产中?
html-snapshots
建议像普通Apache2一样解决它:
<ifModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteCond %{REQUEST_URI} !^/snapshots [NC]
RewriteRule ^(.*)/?$ /snapshots/$1 [L]
</ifModule>
有人有经验如何做到最好吗?