¿Cómo configurar mod_rewrite para servir archivos minificados, si están disponibles?

StackOverflow https://stackoverflow.com/questions/243124

  •  04-07-2019
  •  | 
  •  

Pregunta

Aquí está el problema: tenemos muchos Javascripts y muchos archivos CSS, que preferiríamos estar minificados. La minificación es fácil: configure el compresor YUI, ejecute una tarea Ant y escupe los archivos minificados, que guardamos junto a los originales.

Así que terminamos con la siguiente estructura de directorios en algún lugar dentro de nuestro DocumentRoot:

/
   /js
      /min
         foo-min.js
         bar-min.js
      foo.js
      bar.js
      quux.js
   /css
      ...

Ahora lo que necesitamos es que Apache sirva los archivos desde el subdirectorio min , y retroceda hasta que sirva los archivos sin comprimir , si sus versiones mínimas no están disponibles. El último problema es el que no puedo resolver.

Por ejemplo: supongamos que tenemos una solicitud para example.com/js/foo.js : en este caso, Apache debería enviar el contenido de /js/min/foo-min.js . No hay quux.js minificado, por lo que la solicitud para /js/quux.js devuelve /js/quux.js , no 404. Finalmente, si no hay /js/fred.js , debería terminar con 404.

En realidad, estoy configurando scripts de compilación de tal manera que los archivos no minizados no se implementen en el servidor de producción, pero esta configuración aún podría ser útil en un servidor de integración y en máquinas de desarrollo.

¿Fue útil?

Solución

Aquí está la configuración que finalmente funcionó:

/js/.htaccess:

RewriteEngine On

RewriteBase /js

RewriteCond %{REQUEST_URI} ^/js/((.+)\.js)$
RewriteCond %{DOCUMENT_ROOT}/js/min/%2-min.js -f
RewriteRule ^(.+)$ min/%2-min.js [L]

Lo mismo para el directorio css .

Otros consejos

Puede usar RewriteCond para detectar la presencia de un archivo minified:

RewriteCond %{REQUESTURI} ^/js/(.*\.js)
RewriteCond js/min/%1 -f
RewriteRule %1 min/%1 [L]

¿Es posible cambiar tus scripts de compilación? Si es así, puede configurarlos para minimizar los archivos y darles el mismo nombre de archivo, pero solo cuando se les proporcione el indicador adecuado, por ejemplo. ant productionDeploy en lugar de ant integrationDeploy . De esa manera, el proceso de minificación es completamente transparente para todo excepto el script de compilación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top