为什么 IIS 无法读取 Windows 上由 Bash 创建的文件夹中的 Web.config?

为什么 IIS 无法读取 Windows 上由 Bash 创建的文件夹中的 Web.config?

如果我使用 bash(来自通过 Windows Subsystem for Linux 运行的 Ubuntu 18.04)在我的 Windows 配置文件下创建一个目录:

$ mkdir /mnt/c/Users/mdmower/source/repos/WebBash

那么 IIS 10 无法Web.config直接读取该目录。作为一个最小示例,尝试将这个简单文件Web.config放入 Windows 资源管理器创建的目录以及 bash 创建的另一个目录中:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <clear />
    </handlers>
  </system.webServer>
</configuration>

现在,在 IIS 10 中添加一个指向在 Windows 中创建的目录的网站。添加网站后,访问 Handlers Mapping 部分。您应该看到它已被清除(这是示例的唯一功能Web.config)。将网站的源目录更改为在 bash 中创建的目录。Handlers Mapping 部分不再被清除。

虽然我通常会假设这是由于权限引起的,但我无法在每个目录的安全设置(属性 > 安全 > 高级)中找到任何差异。unix 权限(无论如何都不应该有影响)对于两个目录也是相同的(drwxrwxrwx)。PowerShell 的 Get-ItemProperty 报告称,两个目录具有相同的模式(d-----)且没有 LinkType。

为什么 IIS 10 无法读取用 bash 创建的目录?

软件版本:
Windows 10 x64 版本 1803(操作系统内部版本 17134.320)
IIS 10 版本 10.0.17134.1

答案1

感谢 thealkencgithub.com/Microsoft/WSL/issues/3596为我指明了正确的方向。该问题与每个目录区分大小写和 WSL

查询目录的区分大小写标志:

fsutil.exe file queryCaseSensitiveInfo <path>

设置目录的区分大小写标志:

fsutil.exe file setCaseSensitiveInfo <path> enable
fsutil.exe file setCaseSensitiveInfo <path> disable

在目录中禁用区分大小写标志后WebBash,IIS 可以正常读取 Web.config。这让我想到 IIS 可能正在寻找小写字母web.config。我重新启用了目录中的区分大小写功能WebBash,然后复制Web.configweb.config(是的,Windows 资源管理器让我将两者保存在同一个文件夹中)。IISweb.config可以正常读取!

Web.config 和 web.config 位于同一区分大小写的 Windows 目录中

相关内容