Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure Blob存储上使用静态网站选项托管SPA(干净的URL和深度链接)_Azure_Single Page Application_Azure Storage Blobs_Static Site_Azure Cdn - Fatal编程技术网

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

在Azure Blob存储上使用静态网站选项托管SPA(干净的URL和深度链接),azure,single-page-application,azure-storage-blobs,static-site,azure-cdn,Azure,Single Page Application,Azure Storage Blobs,Static Site,Azure Cdn,我已成功地使用Microsoft文档中建议的$web容器在Azure Blob存储上建立了一个静态网站。此外,我还为定义了index.html,索引文档名和“错误文档名”。这是因为我希望我的JavaScript应用程序处理404响应 然而,当我在Chrome中查看网络选项卡时,我可以看到一个404正在为我请求的URL抛出,尽管页面实际工作 我的理论如下: Azure检查“文件”是否存在 如果文件存在,它将返回该文件 如果文件不存在,它会抛出一个404,并将url重写为“错误文档名”,即在我的情

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

然而,当我在Chrome中查看网络选项卡时,我可以看到一个
404
正在为我请求的URL抛出,尽管页面实际工作

我的理论如下:

  • Azure检查“文件”是否存在
  • 如果文件存在,它将返回该文件
  • 如果文件不存在,它会抛出一个
    404
    ,并将url重写为“错误文档名”,即在我的情况下
    index.html
    (因此我的页面仍然有效)
我的问题是我的URL是干净的URL,例如:

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

需要明确的是,页面确实可以运行,因为它仍然将
404
错误路由到
index.html

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

我们已经建立了一个高级Verizon CDN,因为我最初不知道Azure Blob上的静态网站选项。如果CDN是最佳路线,请提供如何配置CDN以提供我所需内容的说明

我所做的尝试/研究 我已经阅读了许多文章(特别是中的评论),我相信可能有各种解决方案,例如Azure功能、代理、CDN等。也就是说,没有任何一种解决方案提供关于如何实际使用这些特定服务的明确说明


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

我想我找到了解决方案

  • 添加新规则
  • 条件:URL文件扩展名

    a。接线员:少于

    b。分机:1

    c。案例转换:无转换

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

  • 操作:URL重写

    a。源模式:/

    b。目的地:/index.html

    c。保留不匹配路径:否

  • 保存规则

  • .

    安德烈亚斯·温德尔在

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

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

    因此,index.html是为了响应像
    /users/
    这样的深层链接而提供的,比如说
    /users/alexa.siri

    你找到解决方案了吗?因为我和你在同一条船上,我正准备按照你的方法,但我不希望404状态码被抛出。我只是想用我的SPA捕捉每个URL。@Lev-我对Azure不够熟悉,不知道所有可能的解决方案,但我相信有各种选择。幸运的是,我们需要高级CDN(出于其他原因),这提供了所需的重写功能来实现我需要的功能。事实上,我昨晚也找到了解决方案。这是重写URL功能,它现在是标准Microsoft CDN计划的一部分。所有参考资料和文档都表明您需要高级计划,但它是去年某个时候添加到标准计划中的。:)这是一个很好的答案,只是为了理解为什么选择302而不是301进行HTTP到HTTPS重定向?因为我们使用SPA,我不希望爬虫程序用index.html替换特定路由,而是维护当前路由。因此,我使用302而不是301。另请参阅此Microsoft文档教程:感谢您提供的解决方案。现在将CDN与blob存储结合使用就足够了。无需在blob存储中使用静态网站功能。此外,我们还可以在同一blob存储中使用多个容器来存储多个静态网站。清晰、简洁的答案与我的代码拆分完美结合。如果您在查找“添加规则”页面时遇到问题,您并不孤单!1-点击“Azure CDN”标签(静态网站下方)。2-创建一个新的CDN配置文件(小心选择WEB链接而不是BLOB。3-在“所有资源”上输入新的CDN配置文件。4-单击“概述”中看到的单个端点。5-单击“规则引擎”。现在,您可以完美地看到Andreas所说的屏幕