0

我正在尝试从需要使用从子文件夹中提供文件的 Apache 服务器不区分大小写mod_rewrite地提供文件。

.
├── .htaccess
├── example.com
│   └── downloads
│       └── file.zip
└── www.reddit.com
    └── r
        └── programming
            └── index.html

服务器充当代理并根据 HTTP 主机变量为每个文件夹提供服务。为此,我使用 an.htaccess来执行简单的内部重定向。

出现问题是因为它还需要不区分大小写,我想服务file.zip,等等。为此,我尝试FiLe.zip了,这几乎可以工作。问题是,如果我访问,我会被重定向到404。FILE.ZIPmod_spelingFiLe.ziphttp://example.com/example.com/downloads/file.zip

据我了解,它mod_speling适用于实际路径,因此结果是有意义的。然而,它并不令人满意。

有什么方法可以重写更正的路径mod_speling吗?如果没有,是否有另一种可能的方法来实现这一点?

我还尝试堆叠ciopfs保险丝安装,这是一个不区分大小写的覆盖文件系统,但它无法看到这些文件,因为如果它们包含任何大写字符,它就会跳过它们。

我无法将这些子文件夹中的每一个都配置为不同的虚拟主机,因为有数百个这样的文件夹,并且它们是动态添加或删除的。

4

2 回答 2

2

最终编写了我自己的 FUSE 文件系统作为 ciopfs 的替代品。

https://github.com/XXLuigiMario/fuzzyfs

此文件系统尝试通过在同一目录中检查相同文件名但大小写不同的不同实例来定位文件。类似于 mod_speling 如何尝试纠正大写错误。要使用它,你只需要给它一个目录和一个挂载点:

$ fuzzyfs /mnt/data /var/www/htdocs

这个挂载点将镜像给定的目录,除了它还将像其底层文件系统不区分大小写一样执行。此工具需要在系统上安装 FUSE。要安装 blurfs,请使用 git 克隆它并运行make && make install.

于 2020-08-26T16:58:03.047 回答
0

您可以将该位置挂载为本地 smb 挂载(服务器为 localhost),可能使用 Samba 服务器。它将在现有区分大小写的文件之上表现不区分大小写。这是对性能的过度杀伤,因为它向堆栈添加了一层客户端-服务器流量,但它会完成这项工作。

于 2020-08-25T08:07:11.793 回答