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

时间:2019-11-27 14:23:47

标签: azure single-page-application azure-storage-blobs static-site azure-cdn

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

但是,当在Chrome中查看“网络”标签时,尽管页面实际上在工作,但我看到正在向我请求的URL抛出404

我的理论如下:

  • Azure检查“文件”是否存在
  • 如果文件存在,则将其返回
  • 如果文件不存在,它将抛出一个404并将URL重写为“错误文档名称”,即我的情况是index.html(因此我的页面仍然可以使用)

我的问题是我的URL是干净的URL,例如:

/activities/some-slug永远不会以文件形式存在,这只是告诉我的JavaScript应用程序将请求路由到哪里,即要加载的视图。

请注意,页面之所以能工作,是因为该页面仍将404错误路由到index.html

如何告诉Azure blob将所有内容绝对路由到index.html,并在必要时让我的应用抛出404

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

我尝试过/研究过的

我已经阅读了许多文章(特别是this one中的评论),并且我相信可能会有各种解决方案,例如Azure Functions,Proxy,CDN等。也就是说,没有一个提供关于如何实际使用的明确说明。这些特定的服务。

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

2 个答案:

答案 0 :(得分:17)

我想我找到了解决方法

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

    a。运算符:小于

    b。扩展名:1

    c。大小写转换:无转换

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

  3. 操作:URL重写

    a。源模式:/

    b。目的地:/index.html

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

  4. 保存规则

Screenshot

答案 1 :(得分:1)

https://github.com/MicrosoftDocs/azure-docs/issues/43257#issuecomment-580668444向Andreas Wendl致敬

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

enter image description here

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

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