Apache 使用mod_rewrite在内部重定向后提供不区分大小写的文件

Apache 使用mod_rewrite在内部重定向后提供不区分大小写的文件,apache,mod-rewrite,filesystems,fuse,mod-speling,Apache,Mod Rewrite,Filesystems,Fuse,Mod Speling,我正在尝试从Apache服务器上以不敏感的方式提供文件,该服务器需要使用mod_rewrite来提供子文件夹中的文件 . ├── .htaccess ├── example.com │ └── downloads │ └── file.zip └── www.reddit.com └── r └── programming └── index.html 服务器充当代理,并根据HTTP主机变量为每个文件夹提供服务。 为此,我使用.h

我正在尝试从Apache服务器上以不敏感的方式提供文件,该服务器需要使用
mod_rewrite
来提供子文件夹中的文件

.
├── .htaccess
├── example.com
│   └── downloads
│       └── file.zip
└── www.reddit.com
    └── r
        └── programming
            └── index.html
服务器充当代理,并根据HTTP主机变量为每个文件夹提供服务。 为此,我使用
.htaccess
执行简单的内部重定向

问题的出现是因为它还需要不区分大小写,我希望提供
file.zip
file.zip
file.zip
等服务。。 为此,我尝试了
mod_speling
,几乎奏效。问题是,如果我访问
FiLe.zip
,我会被重定向到
http://example.com/example.com/downloads/file.zip
,这是一个404

据我所知,
mod_speling
在实际路径中工作,因此结果是有意义的。然而,这并不令人满意

有没有办法从
mod_speling
重写正确的路径? 如果没有,是否有其他可能的方法来实现这一点

我还尝试堆叠
ciopfs
fuse-mount,这是一种不区分大小写的覆盖文件系统,但它看不到文件,因为如果文件包含任何大写字符,它会跳过这些文件


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

您可以将该位置装载为本地smb装载(服务器为本地主机),可能使用Samba server。它将在现有区分大小写的文件上不区分大小写。这是对性能的过度消耗,因为它向堆栈添加了一层客户机-服务器通信量,但它可以完成这项工作。

您可以将该位置装载为本地smb装载(服务器为本地主机),可能使用Samba服务器。它将在现有区分大小写的文件上不区分大小写。这是对性能的过度消耗,因为它在堆栈中添加了一层客户机-服务器通信量,但它可以完成这项工作。

最终编写了自己的FUSE文件系统,作为ciopfs的替代方案

此文件系统试图通过在同一目录中检查具有相同文件名但大小写不同的不同实例来定位文件。类似于mod_speling试图纠正大写错误的方式。要使用它,只需给它一个目录和一个装入点:

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


此装载点将镜像给定的目录,除非它的底层文件系统不区分大小写。此工具要求在系统上安装保险丝。要安装fuzzyfs,请使用git克隆它并运行
make&&makeinstall

最终编写了自己的FUSE文件系统,作为ciopfs的替代方案

此文件系统试图通过在同一目录中检查具有相同文件名但大小写不同的不同实例来定位文件。类似于mod_speling试图纠正大写错误的方式。要使用它,只需给它一个目录和一个装入点:

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


此装载点将镜像给定的目录,除非它的底层文件系统不区分大小写。此工具要求在系统上安装保险丝。要安装fuzzyfs,请使用git克隆它,然后运行
make&&makeinstall

注意,内核中的inode缓存可能会导致不清晰。请注意,内核中的inode缓存可能会导致不清晰。看见