4

我正在尝试Angular通过Azure Storage Static Website Azure CDN Verizon Premium

假设我有每个Angular名为 like 的构建的容器,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 时遇到的主要问题是,URL Rewrite如果我将我的 IF 字段声明为Always

在此处输入图像描述

如您所见URL Rewrite,未列出。

我也使用Always 语句进行了几次部署,但它们没有任何好处。

每个人都在他们的博客中分享的一个例子

在此处输入图像描述

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

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

提前致谢。

4

3 回答 3

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>

我希望这对某人有帮助

于 2020-12-15T17:07:47.260 回答
0

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

于 2020-11-24T16:13:03.480 回答
0

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

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

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

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

作为记录,如果您尝试在“feature.url.url-redirect source”部分中使用包含 /[0-9]+ 之类的正则表达式进行部署,则当您将草稿更改为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>
于 2022-03-02T23:40:42.780 回答