Nginx 位置正则表达式不匹配

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

我正在尝试使用 10 位 unix 时间戳为我的 js / css 获取版本控制设置,但在使用以下有效的正则表达式进行正则表达式匹配时遇到问题。

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

答案1

我会尝试不使用 \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)$"

相关内容