invertierte FilesMatch?

8

Ich setze Cache Control Header für Dateien. Ich möchte max-age=86400 für alle .css und .js und max-age=3600 für alle anderen festlegen.

%Vor%

Ich kann nicht herausfinden, welche Regex ich schreiben soll, um \.(css|js)$ match zu invertieren. Oder gibt es eine andere Möglichkeit, dies zu tun?

UPDATE Basierend auf dieser Frage habe ich eine Lösung gefunden, die funktioniert:

%Vor%

Leider kann ich keinen Weg finden, den Punkt \. außerhalb der Klammern zu belassen. Aber diese Lösung ist immer noch gut für mich.

Als eine Randnotiz enthalten alle anderen Dateien solche, die überhaupt keinen Dateinamen haben, wie http://example.com/ .

    
Petr Abdulin 17.10.2012, 03:19
quelle

3 Antworten

4

Basierend auf dieser Frage habe ich eine Lösung gefunden, die funktioniert:

%Vor%

Leider kann ich keinen Weg finden, den Punkt \. außerhalb der Klammern zu belassen. Aber diese Lösung ist immer noch gut für mich.

    
Petr Abdulin 20.11.2012, 02:27
quelle
3

Sie sollten bis zum Ende der Zeichenfolge nach der echten Dateierweiterung suchen (das ist die letzte, nicht Punkt enthaltende Teilzeichenfolge)

%Vor%

Erläuterung:

  • .+\. Suchen Sie gierig nach der ganzen Zeichenfolge, um den letzten Punkt zu finden.
  • (?!(css|js)$) Überspringe alle .css oder .js , die bis zum Ende der Zeile enden (behalte aber zB .jsx )
  • [^\.]+?$ erhält den Erweiterungsteil (keine Punkte bis zum Ende der Zeichenkette)
Gabber 17.10.2012 08:41
quelle
1

Sie können das versuchen.

%Vor%

Die erste Gruppe .+? erhält den Dateinamen und die zweite negative Vorschau Gruppe ?!(css$|js$) prüft, ob die Dateiendung nicht css oder js ist. Dies stimmt nur mit Dateien überein, die keine .css- oder .js-Erweiterungen haben. Sie können das erste und das letzte ersetzen. mit einer Zeichenklasse, die auf den erlaubten Dateinamen-Zeichen basiert.

Bearbeitet: Dies entspricht test.cssx oder test.jxabc

    
pogo 17.10.2012 03:36
quelle

Tags und Links