Pergunta

Aqui está o problema: temos muitas Javascripts e lotes de arquivos CSS, que nós preferimos estar servindo minified. Minification é fácil: configurar o Compressor YUI, executar uma tarefa Ant, e ele cospe arquivos minified, que poupamos ao lado dos originais

.

Então vamos acabar com a seguinte estrutura em algum diretório dentro do nosso DocumentRoot:

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

Agora o que precisamos é que o Apache servir arquivos do min subdiretório, e fallback para servir arquivos descompactados , se suas versões minified não estão disponíveis. A última questão é o que eu não posso resolver.

Por exemplo: suponha que temos um pedido para example.com/js/foo.js - neste caso, o Apache deve enviar conteúdo de /js/min/foo-min.js . Não há como minified quux.js , então pedido para /js/quux.js retorna /js/quux.js em si, e não 404. finalmente, se não há nenhuma /js/fred.js , que deve acabar com 404.

Na verdade, eu estou definindo scripts de construção de tal maneira a que os arquivos unminified não são implantados no servidor de produção, mas essa configuração pode ainda ser útil em um servidor de integração e em máquinas de desenvolvimento.

Foi útil?

Solução

Aqui está a configuração que finalmente funcionou:

/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]

Mesmo para css diretório.

Outras dicas

Você pode usar RewriteCond para detectar a presença de um arquivo minified:

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

É possível alterar os seus scripts de construção? Se assim for, você pode configurá-los para apoucar os arquivos e dar-lhes o mesmo nome do arquivo, mas apenas quando prestados a bandeira apropriada, por exemplo, ant productionDeploy vez de ant integrationDeploy. Dessa forma, o processo de minimização é completamente transparente para tudo, exceto o script de construção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top