2016-04-19 10 views
1

mod_rewriteとhtaccessを使用して、URLのフィンガープリントを実装する方法はありますか?更新ごとにファイル名を変更する必要はありませんか?htaccess URLフィンガープリンティング

これは、サーバー上のファイル構造(無関係なファイルは省略)である:

/apps 
    /foo 
     /public 
      /js 
       file1.min.js 
       file2.min.js 
      /css 
       file1.css 
       file2.css 
    /bar 
     /public 
      /js 
       file1.min.js 
       file2.min.js 
      /css 
       file1.css 
       file2.css 

マイページでは、アプリケーションフォルダにあります。私のページで<script>要素、現時点では次のようになります。

<script src='public/js/file1.min.js'></script> 
<script src='public/js/file2.min.js'></script> 

私はURL fingerprintingを実装したいと思いますので、私の要素は次のようになります。

<script src='public/js/file1.1a516fba.min.js' integrity='sha384-...'></script> 
<script src='public/js/file2.faf315f3.min.js' integrity='sha384-...'></script> 

私は、ファイルにすべての時間を展開でき名前は変更されましたが、より簡単な方法があるかどうか疑問に思っています。

私はapps内部の私の.htaccessファイルでこれを試してみました:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteRule ^public/(css|js)/(.*)\.[0-9]+(\.css|\.js)$ /public/$1/$2.$3 [L, QSA] 
</IfModule> 

これは動作しませんでした。私もそれを試して、HTTP 500(完全に失敗した)か404(ルールはうまくいかない)のいずれかになった。

可能であれば、すべてのアプリケーションのフォルダで.htaccessを繰り返さないようにしたいのですが、ファイルをソース管理(so inside /apps)にしておきたいと思います。

答えて

1

数字を許可するだけでfaf315f3をキャプチャしようとしています。これは問題がある場所です。あなたにもアルファを含める必要があります。また、私はあなたのルールにいくつかの機能強化を

RewriteRule ^public/(css|js)/([^.]+).[0-9a-z]+((?:.min)?.(?:css|js))$ /public/$1/$2$3 [NC,QSA,L] 

作りました:

  1. あなたがルールにピリオドをエスケープする必要はありません - これらは、唯一の条件で必要とされます。
  2. .*(長さはゼロ、それ以上)の代わりに[^.]+(ピリオドではないもの)を使用してください。
  3. 最後のcss|jsのキャプチャ外にピリオドを移動すると、キャプチャは宛先URIに複製されます。
  4. ファイル拡張子のグループ全体をキャプチャし、.minをオプションにします。これは、宛先URIのピリオドを削除することも意味し、その結果は$1/$2$3となります。
+1

ありがとうございます!私は、ハッシュをオプションにするためにいくつかの変更を行いました。また、 '.min'はオプションではないと考えられています。 –