【问题标题】:Azure CDN Premium Verizon Rules Engine V4 URL Rewrite for Storage Static Website sub directoriesAzure CDN Premium Verizon Rules Engine V4 URL Rewrite for Storage 静态网站子目录
【发布时间】:2020-10-20 03:58:31
【问题描述】:

我正在尝试使用Azure Storage Static Website Azure CDN Verizon Premium 主持一个Angular 项目

假设我为每个 Angular 构建命名为 v0.3.13.3 的容器,并且在该容器中还有 Angular 项目的多语言构建。

我想要实现的是为正确的index.html 提供每个版本和语言的正确路由。

您可以在下面找到示例路线:

my.domain.com/v0.3.13.3 应该服务于/v0.3.13.3/index.html
my.domain.com/v0.3.13.3/dashboard 应该服务于/v0.3.13.3/index.html
my.domain.com/v0.3.13.3/fr 应该服务于/v0.3.13.3/fr/index.html
my.domain.com/v0.3.13.3/fr/dashboard 应该服务于/v0.3.13.3/fr/index.html

我已经设法用Azure Standard Rules Engine 做到了,就像下面的屏幕截图一样。

但据我从文档中看到,在标准规则引擎中,Contains 字段不能用正则表达式填充。我已经在谷歌上进行了挖掘,但似乎找不到任何适合我的解决方案。

所以我已将我的 CDN 服务切换到 Verizon Premium 并尝试将 (v(?:(\d+)\.)?(?:(\d+)\.)?(?:(\d+)\.\d+)) 应用于路径正则表达式。

我在使用 Verizon Premium 时遇到的主要问题是,如果我将我的 IF 字段声明为 Always,我只能应用 URL Rewrite 功能

如您所见,URL Rewrite 未列出。

我还使用Always 声明进行了几次部署,但效果不佳。

每个人都在博客中分享的单个示例

所以上面的例子不包括文件扩展名和子路由。

有什么方法可以实现我的目标吗?

提前致谢。

【问题讨论】:

  • 你找到解决这个问题的方法了吗?

标签: azure-blob-storage azure-cdn verizon


【解决方案1】:

请参阅下面的规则引擎 4.0,了解如何在 Azure CDN 中选择 URL 重写 - 目前缺少文档,但仍在尝试使其正常工作。设置正确后,我将更新此帖子

【讨论】:

    【解决方案2】:

    我将在规则 V4 中分享我在 Verizon Premium 中使用的当前配置: 步骤是:

    1. 新规则:一般总是
    2. 功能:URL -> URL 重写
    3. 来源:/80XXXXXX/XXXXXX/((?:[^\?]*/)?)($|\?.*)
    4. 目的地:/80XXXXXX/XXXXXX/index.html$2
    5. 并添加第二条规则。来源:/80XXXXXX/XXXXXX/((?:[^\?]*\/)?[^\?\/.]+)($|\?.*)
    6. 目的地:/80XXXXXX/XXXXXX/index.html$2

    您也可以按照此处https://stackoverflow.com/a/58700538/3591687 中所述获取原点

    这是生成的 XML 规则

    <policy>    
      <rules>   
        <rule>
            <match.always>
                <feature.url.url-rewrite source="/80XXXXXX/XXXXXX/((?:[^\?]*/)?)($|\?.*)" destination="/80XXXXXX/XXXXXX/index.html$2"/>
                <feature.url.url-rewrite source="/80XXXXXX/XXXXXX/((?:[^\?]*\/)?[^\?\/.]+)($|\?.*)" destination="/80XXXXXX/XXXXXX/index.html$2"/>
            </match.always>
        </rule>
      </rules>
    </policy>
    

    希望对大家有所帮助

    【讨论】:

      【解决方案3】:

      我曾在 2022 年 3 月使用 V4 规则引擎处理过这个问题。我终于通过 复制重定向 来处理原始服务器的两个哈希值,在我的例子中从 00 和 08 开始,使重定向工作。感觉 CDN 使用的是蓝/绿部署方法,每次部署时,它都会切换到另一台服务器。

      因此,如果您使用以 00 开头的哈希进行部署,它会将您的部署移动到 08 服务器。

      然后您尝试使用 08 哈希进行部署,但系统抱怨您没有更改任何内容。 :)

      所以我只是复制代码,晚上哭到枕头上。

      作为记录,如果您在更改 draft 时尝试使用包含 /[0-9]+ 之类的正则表达式在“feature.url.url-redirect source”部分进行部署进入policy,系统会抱怨源不匹配任何已知的来源。

      这对我有用。如果有人有更优雅的解决方案,我欢迎!

      <policy>
      <rules>
          <rule>
              <description>Redirect HTTP to HTTPS 00 Version</description>
              <match.request.request-scheme.literal value="http">
                  <feature.url.url-redirect source="/00XXXXXX/www-example-com/(.*)" destination="https://%{host}/$1" code="302"/>
              </match.request.request-scheme.literal>
          </rule>
          <rule>
              <description>Redirect HTTP to HTTPS 80 Version</description>
              <match.request.request-scheme.literal value="http">
                  <feature.url.url-redirect source="/80XXXXXX/www-example-com/(.*)" destination="https://%{host}/$1" code="302"/>
              </match.request.request-scheme.literal>
          </rule>
          <rule>
              <description>Site redirects to 00 Version</description>
              <match.request.request-scheme.literal value="https">
                  <select.first-match>
                      <match.url.url-path.regex result="match" value="[\/#]*\/dir1\/subdir1.*" ignore-case="true" encoded="false">
                          <feature.url.url-redirect source="/00XXXXXX/www-example-com/.*" destination="https://www.example.com/#/dir1/subdir1" code="302"/>
                      </match.url.url-path.regex>
                      <match.url.url-path.regex result="match" value="[\/#]*\/folder2\/subfolder2.*" ignore-case="true" encoded="false">
                          <feature.url.url-redirect source="/00XXXXXX/www-example-com/.*" destination="https://www.example.com/#/folder2/subfolder2" code="302"/>
                      </match.url.url-path.regex>
                      <match.url.url-path.regex result="match" value=".*" ignore-case="true" encoded="false">
                          <feature.url.url-redirect source="/00XXXXXX/www-example-com/.*" destination="https://www.example.com/" code="302"/>
                      </match.url.url-path.regex>
                  </select.first-match>
              </match.request.request-scheme.literal>
          </rule>
          <rule>
              <description>Site redirects to 80 Version</description>
              <match.request.request-scheme.literal value="https">
                  <select.first-match>
                      <match.url.url-path.regex result="match" value="[\/#]*\/dir1\/subdir1.*" ignore-case="true" encoded="false">
                          <feature.url.url-redirect source="/80XXXXXX/www-example-com/.*" destination="https://www.example.com/#/dir1/subdir1" code="302"/>
                      </match.url.url-path.regex>
                      <match.url.url-path.regex result="match" value="[\/#]*\/folder2\/subfolder2.*" ignore-case="true" encoded="false">
                          <feature.url.url-redirect source="/80XXXXXX/www-example-com/.*" destination="https://www.example.com/#/folder2/subfolder2" code="302"/>
                      </match.url.url-path.regex>
                      <match.url.url-path.regex result="match" value=".*" ignore-case="true" encoded="false">
                          <feature.url.url-redirect source="/80XXXXXX/www-example-com/.*" destination="https://www.example.com/" code="302"/>
                      </match.url.url-path.regex>
                  </select.first-match>
              </match.request.request-scheme.literal>
          </rule>
      </rules>
      

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 2020-04-06
        • 2018-03-28
        • 2021-06-20
        • 2021-03-19
        • 2020-09-26
        • 2018-03-28
        • 2017-11-27
        • 1970-01-01
        相关资源
        最近更新 更多