2013-03-25 3 views
1

Я использую строки запроса на удаление кеша на моем Javscript/CSS и просто интересно, как я могу переписать это так, чтобы его часть имени файла вместо этого?RewriteRule для JS-кэша busting

Я хочу переписать: website.com/js/m/file.min.js?params на website.com/js/m/file.min.params.js вместо этого.

<IfModule mod_rewrite.c> 

     # Domain Redirects 

     RewriteEngine On 
     RewriteBase/

     RewriteRule ^/js/m/([a-zA-Z.]+).min.[0-9]+.js$ /js/m/$1.min.js [L] 

     RewriteCond %{REQUEST_FILENAME} -s [OR] 
     RewriteCond %{REQUEST_FILENAME} -l [OR] 
     RewriteCond %{REQUEST_FILENAME} -d 
     RewriteRule ^.*$ - [NC,L] 

     #If we're here, redirect through zend: 
     RewriteRule ^.*$ index.php [NC,L] 
    </IfModule> 

ответ

1

Прежде всего вашего этого правила является некорректным и не будет работать:

RewriteRule ^/js/m/([a-zA-Z.]+).min.[0-9]+.js$ /js/m/$1.min.js [L] 

Причина: RewriteRule соответствует URI без слэш.

Теперь ваша задача:

Я хочу переписать: website.com/js/m/file.min.js?params в website.com/js/m/file.min.params. js вместо этого.

Может быть обработаны этим правилом:

# redirect from /js/m/file.min.js?params to /js/m/file.min.params.js 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(js/m/.+?)\.js\?([^\s&]+) [NC] 
RewriteRule^/%1.%2.js? [R=301,L] 

# forward from /js/m/file.min.params.js to /js/m/file.min.js?params 
RewriteRule ^(js/m/.+?\.min)\.([^.]+)\.js$ $1.js?$2 [L,QSA,NC] 
+0

Спасибо за ваш ответ! Я добавил этот код после 'RewriteBase /' и перенаправляет его на 'js/m/scripts.async.min.1363759402.js', но он все еще переходит к последнему RewriteRule, который перенаправляет через index.php, как будто это isn 't match на 'RewriteRule^(js/m/[^.] + \. min) \. ([^.] +) \. js $ $ 1.js? $ 2 [L, QSA, NC]' ?? И.Е. Я ожидал бы 'js/m/scripts.async.min.1363759402.js' для загрузки содержимого' js/m/scripts.async.min.js? 1363759402', но это не так? – Benno

+0

Попробуйте отредактированную версию сейчас. – anubhava

+0

Удивительный, это получилось! Благодаря!! – Benno