使用mod_rewrite内部重定向后不区分大小写的文件服务

问题描述

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

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

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

出现问题是因为它也需要不区分大小写,我想提供file.zipFiLe.zipFILE.ZIP等。 为此,我尝试了mod_speling,该方法几乎可行。问题是,如果我访问FiLe.zip,则会重定向http://example.com/example.com/downloads/file.zip,它是404。

据我了解,mod_speling在实际路径中起作用,因此结果很有意义。但是,这并不令人满意。

是否有任何方法可以从mod_speling重写更正的路径? 如果没有,还有另一种可能的方法来实现这一目标吗?

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

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

解决方法

最终写出了自己的FUSE文件系统来替代ciopfs。

https://github.com/XXLuigiMario/fuzzyfs

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

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

该安装点将镜像给定目录,除了它的执行方式还像其基础文件系统不区分大小写一样。此工具需要在系统上安装FUSE。要安装Fuzzyfs,请使用git克隆并运行make && make install

,

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...