我有一台 IIS 服务器,其中有一个名为“test”的虚拟目录,使用 SMB 协议指向 Isilon OneFS 服务器 (\\192.168.XX\test) 上的共享。我已将 DefaultAppPool 配置为以我创建的具有该共享访问权限的特殊用户身份运行。
当我浏览到虚拟目录(http://localhost/测试),我得到了一个目录列表,并且它按照预期列出了该目录中的所有文件。然而,如果我浏览到实际文件(http://localhost/test/file.txt),我收到来自 IIS 的 404 错误。如果我尝试浏览子目录,也会发生同样的情况。
我已经验证我可以从 Windows 资源管理器正常访问文件。我可以远程访问 IIS 服务器,打开 Windows 资源管理器,转到 \\192.168.XX\test,然后正常打开文件。那么,为什么 IIS 会给我 404 错误呢?
编辑:我创建了一个映射到 \\192.168.XX\test 的驱动器,该驱动器使用与 IIS 相同的用户进行连接,并且我可以从映射驱动器正常打开文件。
我还检查了确保在 IIS 中定义了必要的 MIME 类型。
答案1
事实证明,真正的问题与大小写有关:OneFS(基于 Linux 的操作系统)区分大小写,而 Windows 不区分大小写。
IIS7 非常聪明,在将请求发送给 OneFS 之前,会将请求的文件名转换为全部大写。因此,OneFS 会告诉 IIS 该文件不存在,IIS 将返回 404 错误。
解决方案是将共享中的所有文件和文件夹的名称全部改为大写。
由于这有点麻烦,如果有人知道如何说服 IIS 按原样发送文件名(不大写),请发表另一个答案。
编辑:我们的 OneFS 服务器使用的字符编码不是 UTF-8。根据 OneFS 文档,只要您的字符编码设置为 UTF-8,它就应该不区分大小写。但是,我们不能使用 UTF-8,所以我无法验证它是否有效。
相关 OneFS 文档:
安装后,您可以修改 EMC Isilon 群集的字符编码集
仅可选择 OneFS 支持的字符集。UTF-8 是 OneFS 节点的默认字符集。
注意:如果集群字符编码未设置为 UTF-8,则 SMB 共享名称区分大小写。
您必须重新启动集群才能应用字符编码更改。
警告:字符编码通常在安装群集期间建立。如果操作不当,安装后修改字符编码设置可能会导致文件无法读取。仅在必要时咨询 Isilon 技术支持后修改设置。