URL 重写在 Azure WebApp (Windows) 中无法按预期工作

问题描述 投票:0回答:1

我正在尝试使用 URL 重写来重写 Azure WebApp (Windows) 中的 HTTP_HOST 和 REQUEST URL。 WebApp 前面有一个应用程序网关,它重写了请求 FQDN。

我想用 URL 重写做什么 (1) 如果X_ORIGINAL_HOST中有值,则将X_ORIGINAL_HOST的值赋给HTTP_HOST。 (2) 如果请求 URL 不是以 /en /ja-JP 开头,请在 URL 开头添加 /ja-JP/。

我写的规则如下

<rule name="Rule1">
 <match url="(.*)" />
 <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
  <add input="{HTTP_X_ORIGINAL_HOST}" pattern="^$" negate="true" />
 </conditions>
  <serverVariables> 
    <set name="HTTP_HOST" value="{HTTP_X_ORIGINAL_HOST}" /> 
  </serverVariables> 
</rule>

<rule name="Rule2" stopProcessing="false">
 <match url="^(?!(en|ja-JP)(\/|$)).*$" />
 <conditions>
  <add input="{REQUEST_URI}" pattern="^/.*$" ignoreCase="true" />
 </conditions> 
 <action type="Rewrite" url="/ja-JP/{REQUEST_URI}" appendQueryString="true" /> 
</rule> 

但是,当第二条规则启用时, HTTP_HOST 重写似乎已恢复。 另一方面,当第二条规则被注释掉时, HTTP_HOST 重写已启用。

事实上,当我发现踪迹时, 当启用第二条规则时, GENERAL_SET_REQUEST_HEADER 在 URL_REWRITE_END 之前输出,Headname="HOST" HeaderValue="由第一条规则重写的主机名",Replace="true"。

如何修改重写规则才能使第一条和第二条规则有效?

我将不胜感激任何智者的帮助。

azure url-rewrite-module azure-webapps
1个回答
0
投票

出现此问题的原因是第二个规则在第一个规则之后处理请求,并且似乎覆盖了第一个规则中 HTTP_HOST 重写设置的值。为了使这两个规则正常工作,您需要确保在应用第二个规则时第一个规则中的 HTTP_HOST 值仍然存在。

了解更多详细信息:https://learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference https://learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Using_Server_Variables

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.