Pregunta Invertir FilesMatch?


Estoy estableciendo encabezados de control de caché para los archivos. Quiero establecer max-age=86400 para todos .css y .jsy max-age=3600 para todos los demás.

<FilesMatch "\.(css|js)$">
    Header append Cache-Control max-age=86400
</FilesMatch>

<FilesMatch "???">
    Header append Cache-Control max-age=3600
</FilesMatch>

No puedo entender qué expresión regular debería escribir para invertir \.(css|js)$ partido. ¿O tal vez hay alguna otra forma de hacer esto?

ACTUALIZAR. Residencia en esta pregunta respuesta Encontré una solución que funciona:

<FilesMatch "(?<!\.css|\.js)$">
    Header append Cache-Control max-age=3600
</FilesMatch>

Desafortunadamente no puede encontrar una manera de dejar el punto \. fuera de corchetes. Pero aún así esta solución está bien para mí.

Como nota al margen, todos los otros archivos incluir los que no tienen nombre de archivo, como http://example.com/.


8
2017-10-17 03:19


origen


Respuestas:


Residencia en esta pregunta respuesta Encontré una solución que funciona:

<FilesMatch "(?<!\.css|\.js)$">
    Header append Cache-Control max-age=3600
</FilesMatch>

Desafortunadamente no puede encontrar una manera de dejar el punto \. fuera de corchetes. Pero aún así esta solución está bien para mí.


4
2017-11-20 02:27



Debería ir al final de la cadena para obtener la extensión de archivo real (que es la última subcadena que no contiene puntos)

.+\.(?!(css|js)$)[^\.]+?$

Explicación:

  • .+\. Busca codiciosamente toda la cuerda para encontrar el último punto.
  • (?!(css|js)$) salta cualquier .css o .js terminando hasta el final de la línea (pero conserve, por ejemplo, .jsx)
  • [^\.]+?$ obtener la parte de extensión (sin puntos hasta el final de la cadena)

3
2017-10-17 08:41



Puedes probar esto.

.+?\.(?!(css$|js$)).+

El primer grupo .+? obtiene el nombre del archivo y el segundo grupo de mirada negativa ?!(css$|js$) verifica que la terminación del archivo no sea css o js. Esto coincide solo con archivos que no tienen extensiones .css o .js. Puedes reemplazar el primero y el último. con clase de caracteres basada en los caracteres de nombre de archivo permitidos.

Editado: Esto coincidirá con test.cssx o test.jxabc


1
2017-10-17 03:36