语境
在过去的几天里,我一直在努力解决以下问题,由于 CDN 的本质和对每条新规则的手动审查,我每次最多需要 4 小时来部署新规则。
如以下主题所述,我目前将 Angular 应用程序部署到一个存储帐户,该帐户具有一个名为cdn
在这个blob 容器的根目录中,我的 angular 项目中的整个文件夹已通过我的 CI 设置复制。dist
还设置了 CDN 配置文件,指向origin-path
被叫/cdn
问题
不幸的是,目前存在一个无法直接访问默认文件的问题。
我想要的是将所有传入流量从我的 Angular 应用程序重定向到
index.html
文件。这是为了满足Angular 的路由。此外,我想让对静态文件(例如图像)的任何请求通过而无需任何特定的 url 重写。
我看过关于这个问题的各种帖子,但似乎没有一个答案能涵盖我的情况,或者没有达到预期的结果。
目前我正在使用来自 Verizon的Azure CDN的规则引擎功能。
关于模式,我使用了下一篇文章中提到的所有模式,包括评论中提到的模式。
我还花了至少两天时间来查找各种其他文章和 stackoverflow 文章,但没有一篇适合我的案例。
此外,我还创建了自己的正则表达式模式,但尽管它们在我的测试环境中工作,但一旦部署到 CDN,它们就会工作。
我通常会得到以下结果之一:
- 顶级域
https://myFancyWebsite.azureedge.net
不会将 url 重写为index.html
我会收到一个 http 错误404
- 顶级域将重定向到,
index.html
但一旦我添加了 url 路径就会停止工作- 一旦我开始使用,就会https://myFancyWebsite.azureedge.net/login/callback
再次出现 http 错误404
/login/callback
- 顶级域会将 url 重写为类似
https://myFancyWebsite.azureedge.net/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn ....
http 错误的内容431
微软的官方文档对我的情况也没有帮助。
我很确定我不是第一个将 Angular 应用程序部署到存储帐户的人,并且有人遇到了与我相同的问题。
我很感谢任何为我指明正确方向的信息,因为目前我肯定在考虑放弃整个存储帐户部署。
更新 1
使用本文中也提到的以下source
模式,我至少能够处理对文件的顶级域重写。((?:[^\?]*/)?)($|\?.*)
index.html
不幸的是,我仍然需要一个额外的模式来重定向https://myFancyWebsite.azureedge.net/login/callback
到https://myFancyWebsite.azureedge.net/index.html
更新 2
我目前每天更新一次或两次正则表达式模式,它再次在我的测试环境中工作,但一旦我部署它就停止工作。我开始相信 Azure CDN 在顶级域之后的 URL 中附加了一些内容,但我不知道如何验证这一点。
https://regex101.com/r/KK0jCN/23
更新 3
我们正在写 3025 年,但我仍然不知道为什么例如以下模式不处理顶级域的 url 重写。