Cuando no se sabe lo que se quiere …

… pasa lo que pasa. Que tengo que ir parcheando las cosas.

Menos mal que hay herramientas para ello y sólo hay que saber aplicarlas. Pero vamos al asunto.

Tenemos una instalación Prestashop con el catálogo de la empresa. La anteriores versiones de la web han sido: hecha a mano internamente, con Drupal y con WordPress. Y sin embargo ha habido siempre una parte concreta, muy simple, que resulta ser -a tenor de las quejas- de lo más solicitado: los catálogos que la empresa ha creado con nuestros productos y publicados en formato PDF. Se mantiene una carpeta en local con los documentos y se sincroniza de una tacada con el servidor remoto; como digo, simple y limpio.

Así que cuando me dieron la orden de eliminar la última versión del catálogo hecha con WordPress y poner en primera línea la instalación de Prestashop lo hice sin mucho ruido. Si iba a tomar el control ese programa pues lo haría y ya.

Pero resulta que algunos clientes empezaron a quejarse de que ya no tenían acceso a los catálogos en PDF. Que eran imprescindibles para su trabajo, nuestros pedidos, las ventas y todo lo demás. Vamos, que dónde leches estaban.

Bien, pues una vez enterado de la enésima crisis organizativa añadí un párrafo a la configuración del servidor para que tomase el control y sirviese los archivos como antes:

Alias /pdf      /var/www/html/empresa.com/pdf/Catalog

<Directory /var/www/html/empresa.com/pdf/Catalog>
           Options +Indexes
           IndexIgnore css include images
           IndexOptions Charset=UTF-8 FancyIndexing FoldersFirst
           HeaderName /include/HEADER.html
           ReadmeName /include/FOOTER.html
           Require all granted
</Directory>

Y todos felices. Lo prueban una y otra vez y ninguna pega. ¿ No ? Pues no, porque resulta que habían creado una ruta en Prestashop para servir los PDF desde allí y, ¡ sorpresa !, colisiona con la que acabamos de poner.

https://empresa.com/pdf/pdf fichas/...

Y, claro, no funciona. Y, por supuesto, sufren.

Pues vamos a ver qué se puede hacer. Prestashop ha incluído la ruta en todos los productos que tienen un catálogo en PDF. Casi todos de los publicados hasta ahora diría yo, así que la idea de cambiarlos uno a uno como que da pereza, ¿ verdad ?

Ahí es donde entra en acción la reescritura de URL del servidor Apache. Queremos que si el URL apunta a Prestashop sea éste quien lo sirva; y si no actuamos como hasta ahora. Afortunadamente la URL de este programa incluye una expresión concreta: parte del URL contiene la expresión pdf fichas . Por ahí vamos a atacar el problema.

#
#       Acceso al URL /pdf sin prestashop
#

RewriteEngine on
RewriteCond  %{REQUEST_URI} !fichas
RewriteRule  /pdf/(.*) /var/www/html/empresa.com/pdf/Catalog/$1 [L]

<Directory /var/www/html/empresa.com/pdf/Catalog>
        Options +Indexes
        IndexIgnore css include images
        IndexOptions Charset=UTF-8 FancyIndexing FoldersFirst
        HeaderName /include/HEADER.html
        ReadmeName /include/FOOTER.html
        Require all granted
</Directory>

Y asunto arreglado. Se pueden usar las dos URL indistintamente sin sufrir lo más mínimo. Supongo que con el tiempo todos los catálogos PDF serán integrados en Prestashop y ese acceso desaparecerá pero por el momento así se queda.