Páginas web sin diferencia de mayúsculas (case-insensitive) en Apache/Linux (UNIX)

Hace poco me he encontrado en el caso de portar una aplicación PHP web de una máquina Windows a una Linux. En principio no debería haber problemas, pero la mala práctica de quien programó la aplicación hizo que no siempre coincidieran las mayúsculas de las llamadas a los archivos reales.

Dado que no había una regla no se podía cambiar todo de golpe, y puesto que yo no había programado la aplicación y lo complejo de la revisión, nbo se podía cambiar la aplicación entera.


Buscando por google encontré una solución basada en compartir una unidad de red por samba y montarla en el directório de Apache, pero me parece un gravísimo fallo de seguridad.


Había otra solución basada en mod_pelling de Apache, pero no me ofrecía la solución requerida, sólo era capaz de arreglar una diferéncia, además de no servir para los formularios.



La solución que he aplicado es usar una partición vfat loopback, como las del post anterior, donde copié la aplicación. Los pasos a seguir serían los siguientes:


  1. dd if=/dev/zero of=/particion_extra bs=512 count=X
  2. mkfs.vfat /particion_extra
  3. mount -o loop /particion_extra /var/www/localhost/htdocs/aplicacion
 

Substituyendo X por el doble de KBytes requeridos por la aplicación y la ruta de montaje por la de la carpeta de la aplicación podemos aprovechar las limitaciones de VFAT al diferenciar mayúsculas y minúsculas.



1. Creamos el archivo que hará de partición.
2. Lo formateamos como vfat.
3. Lo montamos.

Si añadimos su entrada al final del archivo /etc/fstab ya nos funcionará permanentemente:

/particion_extra    /var/www/localhost/htdocs/aplicacion          vfat        defaults,noatime,loop         0 1



Con esto nos evitamos el riesgo de compartir una unidad de red en un servidor, y sacamos partido de la compatibilidad de UNIX con dispositivos y tipos de particiones.