2016-04-19 13 views
1

Gibt es eine Möglichkeit, mod_rewrite und htaccess URL-Fingerabdruck zu implementieren, ohne die Dateinamen bei jedem Update ändern zu müssen?htaccess URL fingerprinting

Dies ist die Dateistruktur auf dem Server (irrelevante Dateien weggelassen):

/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 

Meine Seiten sind in den Anwendungsordner. Die <script> Elemente in meinen Seiten sehen wie folgt aus im Moment:

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

Ich mag URL fingerprinting implementieren, so meine Elemente würden wie folgt aussehen:

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

ich jedes Mal mit der Datei bereitstellen könnte Namen geändert, aber ich frage mich, ob es einen einfacheren Weg gibt.

Ich habe versucht, dies in meiner .htaccess Datei in apps:

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

diese Arbeit nicht. Ich habe auch versucht, Variationen davon und entweder endete mit HTTP 500 (vollständig fehlgeschlagen) oder 404 (Regeln hat nicht funktioniert).

Ich möchte vermeiden, eine .htaccess in jedem Anwendungsordner zu wiederholen, wenn möglich, und ich möchte die Datei in der Quellcodeverwaltung (so innerhalb /apps).

Antwort

1

Sie versuchen, faf315f3 zu erfassen, indem Sie nur Ziffern zulassen - hier liegt das Problem. Sie müssen Alphas umfassen auch:

  1. Sie fliehen müssen nicht Perioden in Regeln - diese werden nur unter Bedingungen erforderlich:

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

    Zusätzlich habe ich ein paar Verbesserungen an Ihrer Regel gemacht haben.

  2. Verwenden Sie [^.]+ (alles, was keine Periode ist) anstelle von .* (alles, Null-Länge und höher) für die zweite Capture-Gruppe.
  3. Verschieben Sie die Periode außerhalb der letzten css|js Erfassung, da die Erfassung sie im Ziel-URI duplizieren würde.
  4. Erfassen Sie die gesamte Gruppe für die Dateierweiterung, und machen Sie .min optional. Dies bedeutet auch, dass der Zeitraum im Ziel-URI entfernt wird, was zu $1/$2$3 führt.
+1

Danke! Ich habe einige Änderungen vorgenommen, damit der Hash optional ist und auch '.min' nicht optional sein sollte. –