Как отправить файл через PHP-скрипт JSMin с правильным HTTP-кэшированием (используя .htaccess?) - PullRequest
1 голос
/ 20 августа 2009

Я использую сценарий PHP для JSMin, чтобы удалить комментарии и пробелы из файлов javascript и css перед обслуживанием. Если я установлю

<script src="jsmin.php?file=myfile.js">

файл никогда не кэшируется, поскольку HTTP-заголовок Last-Modified никогда не проверяется для сценария. Поэтому для запуска файлов через JSMin и (надеюсь) включения кэширования я использую .htaccess со следующими настройками:

RewriteEngine on
RewriteRule ^.*$ jsmin.php?file=%{REQUEST_FILENAME} [NC,L]

Затем я могу использовать:

<script src="myfile.js">

и получите эффекты JSMin.

Apache по-прежнему не обслуживает файл с заголовком Last-Modified, поэтому он все еще не кэшируется браузером. Есть ли способ, которым я могу посмотреть на заголовок If-Modified-Since в Apache и обслуживать сценарий JSMin, только если рассматриваемый файл был изменен с соответствующего времени? В противном случае я бы хотел, чтобы браузер использовал кэшированную версию.

Ответы [ 2 ]

3 голосов
/ 21 августа 2009

+ 1 для процесса сборки. Развертывание должно быть автоматизировано. Это делает результат предсказуемым.

Кроме того, Использование пути к файлу в URL-адресе означает, что кто-то отменяет ссылку на него и загружает файл, который ему не нужен. Рассмотрим:

<script src="jsmin.php?file=../../../../../../../../../../../../../../etc/passwd">

Если ваш скрипт просто передает это прямо в командную строку, у вас проблемы.

0 голосов
/ 20 августа 2009

Почему вы не сжимаете файл перед развертыванием? Сжатие во время выполнения кажется более сложным и медленным.

Я использую http://developer.yahoo.com/yui/compressor/

...