Angular项目部署GAE后无法下载apple-app-site-association文件
解决GAE部署后apple-app-site-association无法访问的问题
问题根源
当前app.yml的最后一个handler规则url: /(.*)会匹配所有请求并返回index.html,导致.well-known/apple-app-site-association的请求被转给Angular路由处理,而Angular没有对应路由,因此报错。此外,原skip_files规则会跳过所有以.开头的目录/文件,导致.well-known目录无法被上传到GAE;同时Angular默认不会将src/.well-known打包到dist目录。
解决步骤
1. 配置Angular打包时包含.well-known目录
打开angular.json,找到对应项目的build配置下的assets数组,添加"src/.well-known":
"assets": [ "src/favicon.ico", "src/assets", "src/.well-known" ]
执行ng build时,src/.well-known目录会被复制到dist/listdropper/.well-known下。
2. 修改app.yml添加专属handler规则
在handlers数组最顶部添加匹配.well-known路径的规则(GAE按顺序匹配handler,需放在最前面避免被后续规则覆盖):
handlers: # 新增:匹配.well-known下的所有文件 - url: /.well-known/(.*) secure: always redirect_http_response_code: 301 static_files: dist/listdropper/.well-known/\1 upload: dist/listdropper/.well-known/(.*) http_headers: Strict-Transport-Security: max-age=31536000; includeSubDomains # 原有静态资源规则 - url: /(.*\.(gif|png|jpg|ico|css|js)(|\.map))$ secure: always redirect_http_response_code: 301 static_files: dist/listdropper/\1 upload: dist/listdropper/(.*)(|\.map) http_headers: Strict-Transport-Security: max-age=31536000; includeSubDomains # 原有SPA fallback规则 - url: /(.*) secure: always redirect_http_response_code: 301 static_files: dist/listdropper/index.html upload: dist/listdropper/index.html http_headers: Strict-Transport-Security: max-age=31536000; includeSubDomains
3. 修改skip_files规则,允许.well-known目录上传
原skip_files中的^(.*/)?\..*$会跳过所有以.开头的目录/文件,需要修改为排除.well-known:
skip_files: - e2e/ - node_modules/ - src/ - coverage # 修改规则:跳过除.well-known外的隐藏目录/文件 - ^(.*/)?\.(?!well-known).*$ - ^(.*/)?.*\.json$ - ^(.*/)?.*\.md$ - ^(.*/)?.*\.yaml$ - ^LICENSE
4. 重新打包并部署
执行以下命令重新打包并部署到GAE:
ng build --prod gcloud app deploy
完成以上步骤后,即可正常访问https://www.urlofmysite.com/.well-known/apple-app-site-association。
内容的提问来源于stack exchange,提问作者planetstarbucks
相关产品推荐
相关产品推荐

