Назад | Перейти на главную страницу

Регулярное выражение местоположения Nginx не соответствует

Для кеширования css и js для меня работает следующее:

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

полученные результаты:

$ 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

Я пытаюсь настроить управление версиями для своего js / css, используя 10-значную временную метку unix, и у меня возникают проблемы с получением соответствия регулярного выражения со следующим действительным регулярным выражением.

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

полученные результаты:

$ 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

Я бы попробовал без скобок вокруг \ d, скобки обычно используются либо для смежных символов, либо для чисел, ваши скобки говорят, что соответствуют либо символу '\', либо 'd'

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

Кроме того, вы специально сохраняете информацию о группе, которую вы захватываете, внутри парных скобок?

Для ясности в комментариях ниже.

Начни с простого.

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

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

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

В зависимости от того, что работает, используйте эту базу для цифр и расширьте, как показано ниже.

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

Если вы также сопоставляете http / https, вы можете начать его с http / s, приведенного ниже, не забудьте изменить любое цифровое обозначение.

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