【问题标题】:IIS URL rewrite from one site to another applies custom headers from the web.config of both sites从一个站点到另一个站点的 IIS URL 重写应用来自两个站点的 web.config 的自定义标头
【发布时间】:2021-05-13 06:14:15
【问题描述】:

我在 IIS 8.5 中设置了两个站点,我将它们称为 test 1 (test1.mydomain.com) 和 test 2 (test2.mydomain.com)。 p>

测试 1 web.config 中有一个 URL 重写规则,它将 test1.mydomain.com/app/{route} 重写为 test2.mydomain.com/{route}

<rule name="Test 2 rewrite" stopProcessing="false">
  <match url="^app(\/.*)?$" />
  <action type="Rewrite" url="https://test2.mydomain.com{R:1}" />
</rule>

这一切都按预期工作,但是我发现当应用此重写规则时,测试 1 web.config 中的自定义标头与测试 2 web.config 中的自定义标头一起包含。更具体地说,这意味着我在响应中有 两个 内容安全策略标头。

这会导致问题,因为测试 1 的策略比测试 2 更严格,因此在访问 test1.mydomain.com/app 时,脚本和样式无法加载。

我已经尝试用位置标签包装测试 1 的 system.web 和 system.webServer,看看我是否可以阻止它们被继承,但这没有效果:

<location path="." inheritInChildApplications="false">
    <system.web>
        ...
    </system.web>
    <system.webServer>
        ...
    </system.webServer>
</location>

当 url 被重写以指向测试 2 时,我只希望测试 2 web.config 应用于该请求。这甚至可能吗?如果不可能,是否只有扩展站点 1 的 CSP 以满足站点 2 的要求的解决方案?

谢谢。

【问题讨论】:

    标签: web-config iis-8 content-security-policy url-rewrite-module


    【解决方案1】:

    你必须使用&lt;action type="Redirect",而不是&lt;action type="Rewrite"

    <action type="Redirect" url="https://test2.mydomain.com{R:1}" />
    

    【讨论】:

    • 我希望这仍然是重写而不是将其更改为重定向,以便用户从他们的角度来看保持在同一个子域上。是否根本不可能避免头文件包含在重写中?
    • 保持在同一个域中不是重定向,因此 IIS 从两个站点执行加入 web.configs。看看this page(以及相关帖子的链接),也许可以做你想做的事。
    • 谢谢,这让我发现了 web.config 标签,我现在已经包装了站点 1 的 system.web 和 system.webServer 部分,以防止它们被继承,但遗憾的是,标题仍在测试 2 中设置。我已更新我的问题以包含此内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2021-02-05
    • 2020-04-09
    相关资源
    最近更新 更多