Как настроить mod_rewrite для обслуживания мини-файлов, если они доступны?

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

  •  04-07-2019
  •  | 
  •  

Вопрос

Вот проблема:у нас есть множество Javascript и CSS-файлов, которые мы предпочли бы минимизировать.Минификация проста:настраиваем YUI Compressor, запускаем задачу Ant, и он выдает минифицированные файлы, которые мы сохраняем рядом с оригиналами.

Таким образом, где-то внутри нашего DocumentRoot мы получаем следующую структуру каталогов:

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

Теперь нам нужно, чтобы Apache обслуживал файлы из мин подкаталог, и переход на обслуживание несжатых файлов, если их минифицированные версии недоступны.Последняя проблема - это та, которую я не могу решить.

Например:предположим, у нас есть запрос на example.com/js/foo.js — в этом случае Apache должен отправить содержимое /js/min/foo-min.js.Нет минифицированного quux.js, поэтому запросите /js/quux.js возвращает /js/quux.js сам, а не 404.Наконец, если нет /js/fred.js, в итоге должно получиться 404.

На самом деле я настраиваю сценарии сборки таким образом, чтобы неминифицированные файлы не развертывались на рабочем сервере, но эта конфигурация все равно может быть полезна на сервере интеграции и на машинах разработки.

Это было полезно?

Решение

Вот конфигурация, которая наконец заработала:

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

То же самое для CSS каталог.

Другие советы

Вы можете использовать RewriteCond для обнаружения минимизированного файла:

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

Можно ли изменить ваши сценарии сборки? Если это так, вы можете настроить их так, чтобы минимизировать файлы и дать им то же имя файла, но только при наличии соответствующего флага, например, ant productionDeploy вместо ant интеграцииDeploy . Таким образом, процесс минимизации полностью прозрачен для всего, кроме скрипта сборки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top