用于单页应用程序的 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
这应该为您输出如下内容:
我们尝试在 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
这应该为您输出如下内容: