skip to Main Content

I’m trying to serve files case-insensitively from an Apache server that requires the use of mod_rewrite to serve files from a subfolder.

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

The server acts as a proxy and serves each folder depending on the HTTP Host variable.
To do this, I use an .htaccess to perform a simple internal redirect.

The problem arises because it also needs to be case insensitive, I want to serve file.zip, FiLe.zip, FILE.ZIP etc..
For this I tried mod_speling, which almost works. The problem is that if I access FiLe.zip, I get redirected to http://example.com/example.com/downloads/file.zip, which is a 404.

As I understand it, mod_speling works in actual paths, so the result makes sense. However, it is not satisfactory.

Is there any way to rewrite the corrected path from mod_speling?
If not, is there another possible way to accomplish this?

I also tried stacking a ciopfs fuse mount, a case insensitive overlay file system, but it fails to see the files because it skips them if they contain any uppercase characters.

I cannot configure each of these subfolders as a different virtual host because there are hundreds of these folders and they are added or removed on the fly.

2

Answers


  1. Chosen as BEST ANSWER

    Ended up writing my own FUSE file system as an alternative to ciopfs.

    https://github.com/XXLuigiMario/fuzzyfs

    This file system attempts to locate files by checking in the same directory for a different instance of the same filename but with different capitalization. Similarly to how mod_speling attempts to correct capitalization errors. To use it, you just need to give it a directory and a mount point:

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

    This mount point will mirror the given directory, except it will also perform as if its underlying file system were case insensitive. This tool requires FUSE to be installed on the system. To install fuzzyfs, clone it with git and run make && make install.


  2. You could mount the location as a local smb mount (with server being localhost), possibly using Samba server. It will behave case insensitive on top of existing case sensitive files. It’s an overkill of performance as it adds a layer of client-server traffic to the stack but it will do the job.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search