为什么在设置服务器变量时 IIS 重写规则 returns 错误?

Why IIS rewrite rule returns error when set server variable?

我在IIS中添加了一个新的应用程序,并添加了一个web.config文件来重写:

https://mylocaldomain.com/ogc?a=2&b=3&c=3...

https://myactualdomain.com/ogc?a=2&b=3&c=3...

但是http://myactualdomain.com需要基本身份验证请求。

所以我的 Web.config 如下所示:

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="wms" stopProcessing="true">
                    <match url="^ogc?(.*)" />
                    <action type="Rewrite" url="http://myactualdomain.com/ogc?(.*)" />
                    <serverVariables>                           
                        <set name="HTTP_Authorization" value="Basic abcdefgasdas" />
                    </serverVariables>
                </rule>
            </rules>
          <outboundRules>
              <clear />
              <rule name="wms">
                  <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
                  <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                      <add input="{HTTP_ORIGIN}" pattern="(.*)" />
                  </conditions>
                  <action type="Rewrite" value="{C:0}" />
              </rule>
          </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

这解决了 returns 错误:

500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.

如果我删除以下行,不会出现错误,但会弹出用户名和密码。

 <serverVariables>                          
      <set name="HTTP_Authorization" value="Basic abcdefgasdas" />
 </serverVariables>

如果我设置任何类型的 serverVariables,就会发生 500 错误。我该如何解决这个问题?

默认情况下,分布式重写规则(即为特定站点或 Web 应用程序定义的规则)不能设置或更改任何 IIS 服务器变量,除非服务器变量被添加到“允许”列表。

Select“操作”窗格中的“查看服务器变量...”操作:

使用“添加...”操作将服务器变量 HTTP_COOKIE 和 ORIGINAL_URI 添加到“允许的服务器变量”列表中:

如果问题仍然存在,请使用FRT查看此500错误的原因。