用于单页应用程序的 Azure CDN Microsoft 标准规则引擎重写 URL

Azure CDN Microsoft Standard Rules Engine Rewrite URL for single-page-application

我们尝试在 Microsoft 标准定价上配置 Azure CDN,以允许我们重写 Url 以将所有应用程序路由路由到 ./index.html。如何设置规则引擎重写 url 但保留所有 js 文件? google 中的所有示例都展示了如何在高级定价上执行此操作,但我们喜欢在 Microsoft 标准版上执行此操作,这可能吗?

如果您的 none 页面 URL 包含一个点,您可以设置如下规则:

  • 条件:'URL file extension' = Not Any(即没有扩展名)
  • 操作:'URL rewrite',
    • 来源=/
    • 目的地 = index.html
    • 保留不匹配的路径 = 否

这会将尾部没有点的任何 URL 重写为 index.html。

我终于从 Microsoft 支持部门得到了关于此问题的有效答复。 他们说 Microsoft CDN 规则引擎 支持 URL file extension Not Any 而我应该检查文件扩展名的长度。

  • 条件:URL file extension
    • 运算符=Not greater than
    • 分机 = 0
    • 大小写转换 = No transform
  • 操作:URL rewrite
    • 源模式 = /
    • 目的地 = /index.html
    • 保留不匹配的路径 = No

这个解决方案对我有用。 确保在测试前清除您的 cdn 缓存。

我在使用 Azure Microsoft CDN 在 Azure blob 存储上设置静态网站时遇到了这个挑战。

这是我完成的方法

如果您想使用 Powershell 脚本实现此目的,请使用以下脚本。该脚本还包含用于设置 Http 到 Https 重定向的规则:

# Define Variables
$RESOURCE_GROUP_NAME = MyResourceGroup
$PROJECT = MyProject
$CDN_PROFILE_NAME = MyCDNProfile

# Create a New Http to Https Redirect Rule
$RULE_CONDITION_1 = New-AzCdnDeliveryRuleCondition -MatchVariable 'RequestScheme' -Operator 'Equal' -MatchValue 'HTTP'
$RULE_ACTION_1 = New-AzCdnDeliveryRuleAction -RedirectType 'Moved' -DestinationProtocol 'Https'
$HTTP_TO_HTTPS_RULE = New-AzCdnDeliveryRule -Name 'HttpToHttpsRedirectRule' -Order 1 -Condition $RULE_CONDITION_1 -Action $RULE_ACTION_1

# Create a New SPA Rewrite Rule
$RULE_CONDITION_2 = New-AzCdnDeliveryRuleCondition -MatchVariable 'UrlFileExtension' -Operator 'LessThan' -MatchValue '1'
$RULE_ACTION_2 = New-AzCdnDeliveryRuleAction -SourcePattern '/' -Destination '/index.html'
$SPA_REWRITE_RULE = New-AzCdnDeliveryRule -Name 'SpaRewriteRule' -Order 2 -Condition $RULE_CONDITION_2 -Action $RULE_ACTION_2

# Set the CDN Delivery Policy with the CDN Delivery Rule(s)
$CDN_DELIVERY_POLICY = New-AzCdnDeliveryPolicy -Description "Https redirect policy" -Rule $HTTP_TO_HTTPS_RULE,$SPA_REWRITE_RULE

# Get CDN Endpoint
$CDN_ENDPOINT = Get-AzCdnEndpoint -ProfileName $CDN_PROFILE_NAME -ResourceGroupName $RESOURCE_GROUP_NAME -EndpointName $PROJECT

# Assign the CDN Delivery Policy to the CDN Endpoint
$CDN_ENDPOINT.DeliveryPolicy = $CDN_DELIVERY_POLICY

# Save CDN Endpoint Changes with Updated Delivery Policy
Set-AzCdnEndpoint -CdnEndpoint $CDN_ENDPOINT

这应该为您输出如下内容: