【问题标题】:Can I make an Apache running on Windows case-sensitive?我可以让在 Windows 上运行的 Apache 区分大小写吗?
【发布时间】:2010-10-05 03:55:03
【问题描述】:

Windows 文件系统(FAT、NTFS)不关心文件名的大小写(不区分大小写)。因此,在 Windows 上运行的程序(例如 Apache Web 服务器)不区分大小写处理文件。

当您在 Windows 上创建网站时,您无意中创建了与实际文件名大小写不匹配的链接等。在将网站部署到区分大小写的文件系统(Linux、UNIX 等默认情况下)之前,您通常不会注意到此错误。

现在,我想知道是否有办法避免此类错误,即让 Apache Web 服务器以某种方式关心大小写,即使文件系统不关心。我的意思是 NTFS 确实在文件名中的大写和小写字母之间存在差异,因此理论上应该可以检查文件名是否以区分大小写的方式匹配。


我知道像“只使用小写字母”这样的命名约定可以帮助避免这类问题,但这对现有文件没有帮助而且不太方便:-)

此外,不使用 Windows 也不是一种选择。我没有自愿使用 Windows,在这种情况下,不可能在不同的平台上运行 Apache。

【问题讨论】:

    标签: windows apache file


    【解决方案1】:

    据我所知你不能,但我会关注这个问题以寻找其他答案。

    作为一种解决方法,您说您必须在 Windows 上进行开发。在虚拟 PC 中安装 Linux 怎么样。有几个免费的 VM 程序,例如 VirtualBoxMicrosoft Virtual PC。这样,您就可以将您的开发环境与您的部署环境相匹配。

    除此之外,我发现最好确保所有内容都使用小写字母,从而最大限度地减少错误。

    【讨论】:

    • 我也有过使用虚拟化软件(VMware 等)在 Linux 上运行 Apache 的想法,我希望能得到这样的答案。但让我烦恼的是,恕我直言,它应该可以在 Windows 上实现......
    • 这个答案是否仍然是 100% 正确的,还是在 7 年的时间里事情变得更好了?因为我似乎找不到解决方案xampplocalhostdatabase tables
    • @Wanjia 6 个月前问过,但这些天我可能会在 Docker 容器中运行 Apache,或者可能在 Windows 子系统 (WSL) 中安装和运行 Apache。数据库表也是如此……
    【解决方案2】:

    根据 Apache 文档,这是不可能的,因为 Windows 操作系统中嵌入了不区分大小写的功能。 但是你可以“扭转问题”,让 Linux/Unix 下的 Apache 服务器不区分大小写。只需将以下指令添加到您的 .htaccess 中:

    RewriteEngine On
    RewriteMap lowercase int:tolower
    RewriteCond %{REQUEST_URI} [A-Z]
    RewriteRule (.*) ${lowercase:$1} [R,L]
    

    请参阅文档here

    【讨论】:

      【解决方案3】:

      所以现在可以在 Windows 10 上执行此操作 https://www.windowscentral.com/how-enable-ntfs-treat-folders-case-sensitive-windows-10

      fsutil.exe 文件 SetCaseSensitiveInfo C:\folder\path enable

      【讨论】:

        【解决方案4】:

        NTFS 实际上确实支持区分大小写的文件名。它由 Microsoft 的 UNIX 服务使用和启用。 它在注册表中进行控制。 在“ObCaseinSensitive”注册表项上进行谷歌搜索。 例如msdn blog 特别是这篇微软知识库文章:kb817921

        【讨论】:

        • 问题是它运行得不是很好,很多Windows程序都不支持。
        【解决方案5】:

        这不是你可以用你想要的方式解决的问题。您需要通过强制小写来上传文件。您将避免 Windows 上的命名冲突问题,因此如果您在 Windows 上构建东西,那么您不必担心这一点。现在,您需要使用某种链接检查程序来查找包含大写字母的 URL,然后替换为等效的小写字母。

        不过,Ryan Guill 确实提出了一个很好的建议来启用 CheckSpelling。

        【讨论】:

        • CheckSpelling 没有帮助,因为您只能使用它来掩盖区分大小写的文件系统上的错误。例如,如果我压缩我的网站以将其提供给某人以供离线阅读,我不能告诉他安装启用 CheckSpelling 的 Apache 以避免绊倒死链接
        • 这就是为什么你需要做我建议的第一部分。
        【解决方案6】:

        看来您可以在 Apache 配置文件中使用 CheckSpelling 指令启用 mod_spelling。

        在此处找到的信息和上下文:http://bytes.com/topic/apache/answers/608164-apache-case-sensitive-urls

        编辑:上面引用了问题的反面,对不起。有人确实会问与你之后相同的问题,但无论答案是否有效,都不会回应。进一步观察后,apache 本身似乎没有任何标志或任何设置来执行此操作。一些人建议尝试使文件系统区分大小写,这似乎是可能的,但它看起来会导致更多问题,尤其是对于其他不期望这样做的程序。

        总体而言,如果您无法在其他操作系统上进行开发,并且您无法将所有现有文件名更改为小写(这是可以理解的),那么您看起来并没有太多选择。在这一点上,我给您的唯一建议是尝试获得一个测试环境,设置与您的生产环境完全相同,并在发送到生产环境之前尽可能多地进行测试。

        很抱歉造成误解,我无法提供更多帮助。

        【讨论】:

        • 这个线程中的问题是“我怎样才能让 apache 区分大小写?”和 mod_spelling “纠正用户可能输入的 URL 的拼写错误,忽略大小写并允许最多一个拼写错误。”简而言之,这适用于想要 Windows 行为的 Linux 用户......
        • 您所指的论坛没有提供使 Windows 上的 Apache 区分大小写的解决方案。只有反过来;在 unix 系统上不区分大小写。
        • 你不能反过来做吗?该论坛确实在下面提到了您正在寻找的内容,我引用的这个答案在哪里,但该人从未回过头来说它是否有效。你试过了吗?不过我还在寻找。
        【解决方案7】:

        Windows,可以设置为区分大小写的模式。 NTFS 卷也支持区分大小写模式。如果您之前安装了 UNIX 互操作性,您的 Windows 可能已经变成了区分大小写的模式。我相信注册表中有一个开关,但我忘记了它在哪里,所以我无法为您找到它。 :-(

        【讨论】:

          猜你喜欢
          • 2010-09-06
          • 2018-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多