代码之家  ›  专栏  ›  技术社区  ›  Conor McCarthy

Azure CDN规则引擎添加默认文档,但网站请求的文件除外

  •  5
  • Conor McCarthy  · 技术社区  · 7 年前

    我正在使用Azure Verizon CDN从Blob存储中发布我的web应用程序(SPA)。我已经成功地设置了自定义域和SSL。 我在CDN中添加了一个重写规则,以重定向到默认文档索引。html。基本上,这会接受传入的请求,并在URL路径和任何查询字符串之间插入“index.html”。 所以 mydomain.com/startup 转到 mydomain.com/startup/index.html

    mydomain.com/homepage mydomain.com/homepage/index.html

    mydomain.com/showuser/?userId=xxxxx mydomain.com/showuser/index.html/?userid=xxxxx

    这一切似乎都很好。

    Existing rule to add default document

    SPA使用的地址栏中的URL从不请求实际文件,而是在默认文档索引中编码。html确实如此。对于404,这些文件请求都失败了,因为我想重写规则也会对这些文件起作用。

    我想要的是,如果URL包含文件名,则不执行URL重写。规则引擎阻止我在使用URL重写功能时添加这样的条件-显然,在尝试使用URL重写功能时,不能在URL上使用任何匹配条件。

    Error when trying to use condition involving URL filename

    3 回复  |  直到 7 年前
        1
  •  8
  •   Justin Gould    7 年前

    我也在寻找答案。我最终不得不寻求Azure支持。

    与应用服务和IIS不同,CDN无法在文件不存在时重写URL。然而,只要你的水疗路线不包含 . ,您可以创建一个重写规则,该规则仅作用于不包含 .

    • 转到Azure门户中的CDN配置文件并单击 管理 按钮打开Verizon管理门户。
    • 选择 规则引擎 HTTP大 菜单项。
    • 为新的默认文档规则输入您想要的任何名称。
    • 条件应设置为 如果总是这样 .
    • 单击 + 在“功能”旁边添加新功能。
    • 选择 伪静态 .
    • 请注意用于选择CDN端点的下拉列表。如果您的CDN配置文件中有多个CDN端点,则需要为每个端点添加新功能。
    • 对于图案,输入 [^?.]*(\?.*)?$ . 此模式捕获URL路径 .
    • 对于路径,输入 origin_path/document.ext . 这是棘手的部分。路径相对于 根例如,如果CDN端点的原始路径是 /origin_path 你想重定向到 index.html ,您将进入 origin_path/index.html
    • 单击添加添加您的规则,等待N小时,就可以开始了。
        2
  •  1
  •   Stephen    5 年前

    我对贾斯汀·古尔德的回答有一个补充。使用“IF Always”,您将中断来自Azure的清除请求。幸运的是,他们有一个特定的用户代理,因此您可以在这方面进行匹配。

    此外,如果您使用另一个规则进行HTTP-HTTPS重定向,它将中断HTTP-HTTPS重定向。Verizon不会让你匹配“请求方案”来过滤那些请求,所以你必须狡猾地匹配X-Forwarded-Proto。

    您需要设置以下内容,而不是“IF”“Always”:

    • “IF”Request Header Regex“Name”:“User Agent”与“ECPurge/*”不匹配,忽略大小写: 选中的

    • 如果“请求头文字”名称:“X-Forwarded-Proto”与“http”不匹配,则忽略大小写: 选中的

    • 然后,按照Justin的其余说明进行操作。

    参考: https://github.com/Azure/azure-cli/issues/6722

        3
  •  0
  •   Kyle Burkett    7 年前

    看来你的问题是:

    这些文件请求在404上都失败了,因为我想重写规则也会对这些文件起作用

    如果您的假设是正确的,那么您似乎需要使用文件的相对路径而不是完全限定路径来请求文件。你试过了吗?

    例如,您试图在此处获取生命的资源:

     http://example.com/resource/myresource.pdf
    

    但当你使用这条路径时,你会被重定向到如下位置:

     http://example.com/resource/index.html/myresource.pdf
    

    ...因此,当引用资源时,如果使用相对路径,它看起来会像这样

    <a href="/resource/myresource.pdf">my resource</a>
    

    如果我误解了您的问题,或者这并不能解决您的问题,请添加您在开发人员控制台(F12)中收到的完整错误。。包括url应该是什么以及当您遇到问题时它将转换为什么。