在 Azure Blob 存储上使用静态网站选项托管 SPA(干净的 URL 和深层链接)

Ben*_*rey 15 azure static-site azure-storage-blobs single-page-application azure-cdn

我已经$web按照 Microsoft 文档中的建议,使用容器成功地在 Azure Blob 存储上建立了一个静态网站。另外,我已经定义index.html两种的“索引文件名称”和“错误文件名”。这是因为我希望我的 JavaScript 应用程序处理404响应。

但是,当查看 Chrome 中的网络选项卡时,我可以看到404为我请求的 URL 抛出了a ,尽管该页面实际上可以正常工作。

我的理论如下:

  • Azure 检查“文件”是否存在
  • 如果文件存在,则返回它
  • 如果文件不存在,它会抛出 a404并将 URL 重写为“错误文档名称”,即index.html在我的情况下(因此我的页面仍然有效)

我的问题是我的网址是干净的网址,例如:

/activities/some-slug 永远不会作为文件存在,这只是告诉我的 JavaScript 应用程序在哪里路由请求,即加载什么视图。

需要明确的是,该页面确实有效,因为它仍在将404错误路由到index.html.

我怎样才能告诉 Azure blob 只将所有内容路由到index.html并让我的应用程序在404必要时抛出?

我们确实已经设置了 Premium Verizon CDN,因为我最初不知道 Azure Blob 上的静态网站选项。如果 CDN 是最佳途径,请您提供有关如何配置 CDN 以提供我想要的内容的说明吗?

我尝试过/研究过的

我已经阅读了很多文章(特别是这篇文章中的评论),我相信可能有各种解决方案,即 Azure Functions、代理、CDN 等。也就是说,没有一个提供关于如何使用这些特定服务的明确说明。

我通常在 AWS 上工作,因此并不熟悉所有 Azure 服务和可用配置。

And*_*ndl 25

我想我找到了解决方案

  1. 添加新规则
  2. 条件:URL 文件扩展名

    一种。操作员:小于

    湾 分机:1

    C。案例转换:无转换

    [这基本上意味着请求的 URL 没有文件(扩展名),而是应用程序的路由,将由应用程序路由处理]

  3. 行动:URL 重写

    一种。源模式:/

    湾 目的地:/index.html

    C。保留不匹配的路径:否

  4. 保存规则

截屏.

  • 如果您无法找到“添加规则”页面到底在哪里,那么您并不孤单!1 - 单击“Azure CDN”标签(位于静态网站下方)。2 - 创建新的 CDN 配置文件(注意选择 WEB 链接而不是 BLOB。3 - 在“所有资源”上输入新的 CDN 配置文件。4 - 单击“概述”中看到的单个端点。5 - 单击“规则引擎”。好了,您现在可以完美地看到安德烈亚斯所说的屏幕 (4认同)

Dim*_*nek 5

感谢 Andreas Wendl https://github.com/MicrosoftDocs/azure-docs/issues/43257#issuecomment-580668444

这是一个更简单/可能更正确的解决方案:

在此输入图像描述

  • 离开/static/*
  • 将其他所有内容重写为/index.html

因此,index.html 是为了响应诸如 之类的深层链接而提供/users//users/alexa.siri