将 <location> 标记添加到 web.config 会导致无法访问网站文件夹。怎么修?

Adding the <location> tag to web.config causes website folders to be inaccessible. How to fix?

我在 main 网站下添加了一个应用程序,它是主网站的更新版本。名为 V2 的子应用程序将用于预览对主网站的更改。

为了从主网站访问 V2,我需要修改 web.config 以在 <location path="." inheritInChildApplications="false"> 标签中同时包含 <system.web><system.webServer> 标签。

V2 网站按预期运行(即 //main/V2),但无法读取主文件夹和 V2 中的所有子文件夹。样式和图像位于无法访问的文件夹中。这似乎是一个权限问题。该应用程序配置为允许所有用户完全访问根目录和所有子目录。

    <authentication mode="None" />
    <authorization>
      <allow users="*" />
    </authorization>

我需要做什么才能使所有子目录都可访问?

您在访问子文件夹时收到了什么错误消息?当您应用配置时 <location path="." inheritInChildApplications="false">,将不会应用子文件夹。

IIS 默认会在applicationhost.config 中指定<add accessType="Allow" users="*" />。因此,如果您在 web.config 中指定了 <allow users="*" />,则必须删除 applicationhost.config 中的默认设置以避免重复键错误。

当您仅应用 inheritInChildApplications="false" 时,<allow users="*" /> 将仅适用于根 "location='.'" 级别。并且没有为这些子文件夹指定授权规则。然后,当您访问这些文件夹时,您可能会收到 401.2。

请为这些路径设置授权规则。

要解决权限问题,请启用失败请求跟踪。它会告诉你应该在哪里授予权限。

https://docs.microsoft.com/en-us/iis/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis

权限问题是由 web.config 中的 <location> 标签引起的。 <system.webServer><validation> 标签不喜欢被包裹在 <location> 标签中,所以我把它拉了出来; 像这样。

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>

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

现在所有文件夹都可以读取了。