NGINX如何优先将/app子目录作为静态资源服务,不触发其余Drupal配置规则?
解决方案
你只需要给/app的location规则添加^~前缀匹配修饰符即可,该修饰符会让NGINX匹配到/app开头的请求后,直接终止后续所有正则location匹配流程,完全不会触发Drupal的全局静态资源规则,也不需要修改原有Drupal配置。
完整配置如下:
location ^~ /app { alias /other/folder/app; index index.html; # 适配SPA前端路由,刷新子路径不会出现404 try_files $uri $uri/ /app/index.html; # 可选:单独给/app下的静态资源配置缓存,规则可自定义 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; log_not_found off; } }
配置说明
^~修饰符优先级高于正则location,匹配成功后就不会执行后续的Drupal静态资源规则,完全满足你不改动原有配置、隔离/app路径逻辑的需求- 新增的
try_files规则是SPA子目录部署的必备配置,解决前端路由刷新404的问题 - 如果你不需要单独给/app下的静态资源设置缓存,也可以删掉块内的静态资源location规则,不影响核心隔离逻辑
注意事项
前端打包SPA应用时,需要将资源公共路径(publicPath/base)设置为/app/,否则会出现静态资源加载路径错误的问题。
内容的提问来源于stack exchange,提问作者Vladimir
相关产品推荐
相关产品推荐

