A regex de localização do Nginx não está correspondendo

5

O seguinte tem funcionado para armazenar em cache o css e o js para mim:

location ~ "^(.*)\.(min.)?(css|js)$" {
    expires max;
}

resultados:

$ curl -I http://mysite.com/test.css
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Jan 2014 18:55:28 GMT
Content-Type: text/css
Content-Length: 19578
Last-Modified: Mon, 13 Jan 2014 18:54:53 GMT
Connection: keep-alive
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000
X-Backend: stage01
Accept-Ranges: bytes

Estou tentando configurar a versão para o meu js / css usando um registro de data e hora unix de 10 dígitos e estou tendo problemas para obter uma correspondência de expressão regular com a seguinte expressão regular válida.

location ~ "^(.*)([\d]{10})\.(min\.)?(css|js)$" {
    expires max;
}

resultados:

$ curl -I http://mysite.com/test_1234567890.css
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 16 Jan 2014 19:05:03 GMT
Content-Type: text/css
Content-Length: 19578
Last-Modified: Mon, 13 Jan 2014 18:54:53 GMT
Connection: keep-alive
X-Backend: stage01
Accept-Ranges: bytes
    
por Chris Montanaro 16.01.2014 / 20:05

1 resposta

2

Eu tentaria sem os parênteses ao redor \ d, os colchetes são normalmente usados para caracteres contíguos ou números, seus parênteses dizem que o caractere '\' ou 'd'

"^(.*)(\d{10})\.(min\.)?(css|js)$"

Além disso, você está salvando especificamente as informações do grupo que você está capturando dentro dos parênteses?

Para esclarecer os comentários abaixo.

Comece de forma simples.

"^.*[0-9]*\.css$"

"^.*[:digit:]*\.css$"

"^.*\d*\.css$"

Dependendo de quais trabalhos, use essa base para os dígitos e expanda conforme abaixo.

"^.*\d{10}\.(min\.)?(css|js)$"

Se você também está combinando com o http / https, você pode iniciá-lo com os itens http / s abaixo, lembre-se de alterar a notação de dígitos que funcionou.

"^http(s)?://.*[0-9]{10}\.(min\.)?(css|js)$"
    
por 16.01.2014 / 20:12

Tags