使用Verizon的Azure CDN - 重写URL以始终加载index.html

Han*_*lse 6 url-rewriting azure azure-cdn azure-storage-account angular


上下文


在过去的几天里,我一直在努力解决以下问题,由于CDN的本质和每个新规则的手动审查,我每次最多需要4小时才能部署新规则.

如下面的主题所述,我目前将我的Angular应用程序部署到一个存储帐户,该帐户有一个名为的blob容器cdn

在此输入图像描述

在此blob容器目录中,我的角度项目中的整个文件夹已通过我的CI设置进行复制.dist

在此输入图像描述

CDN配置文件也已设置,指向origin-path被叫/cdn

在此输入图像描述


问题


不幸的是,目前存在一个持续存在的问题,即您无法直接访问默认文件.

  1. 我想要的是将我的Angular应用程序中的所有传入流量重定向到该index.html文件.这是为了满足Angular路由.

    输入具有预期输出的URL

  2. 此外,我想让任何静态文件(例如图像)的请求通过没有任何特定的URL重写.

我已经看过关于这个问题的各种帖子,但没有一个答案似乎涵盖我的情况或没有提供预期的结果.

目前我正在使用Verizon 的Azure CDN规则引擎功能.

关于模式,我使用了下文中提到的所有模式,包括评论中提到的模式.

我还花了至少两天的时间来查找各种其他文章和stackoverflow文章,但它们都没有适合我的情况.

此外,我还创建了自己的正则表达式模式,但是虽然它们在我的测试环境中工作,但一旦将它们部署到CDN,它们就会工作.

我通常最终得到以下结果之一:

  • 顶级域名https://myFancyWebsite.azureedge.net不会重写网址index.html,我会收到一个http错误404
  • 顶级域名将重定向到index.html但是一旦我添加了网址路径就会停止工作https://myFancyWebsite.azureedge.net/login/callback- 一旦404我开始使用,就会再次出现http错误/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/callbackhttps://myFancyWebsite.azureedge.net/index.html


更新2


我目前正在每天更新一次或两次正则表达式模式,并再一次在我的测试环境中工作,但一旦我部署它就停止工作.我开始相信Azure CDN会在顶级域名之后向URL添加内容,但我不知道如何验证.

https://regex101.com/r/KK0jCN/23


更新3


我们写的是3025年,我仍然不知道为什么例如以下模式没有处理顶级域的url重写.

https://regex101.com/r/KK0jCN/25

小智 11

  • 添加具有条件的新规则如果始终
  • 您需要为每个端点添加新功能.
  • 对于Pattern,输入[^?.]*(\?.*)?$.此模式捕获其中的URL路径.,但不关心它是否在查询字符串中.
  • 对于Path,输入origin_path/document.ext.这是棘手的部分.Path与原始根相对.例如,如果您的CDN端点的原始路径是/origin_path并且您想要重定向到index.html,则应输入origin_path/index.html.如果您的CDN由Azure存储帐户支持且原点指向容器,则始终如此.
  • 单击添加以添加您的规则,等待N小时,您就可以开始了.