微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用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)。在现有的区分大小写的文件之上,它将不区分大小写。这是对性能的过大杀伤力,因为它在堆栈中增加了一层客户端-服务器流量,但可以完成工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。