mav*_*cko 5 regex nginx browser-cache regex-lookarounds nginx-location
我为 nginx 中的特定文件启用了缓存,如下所示:
location ~* \.(?:css|js)$ {
access_log off;
add_header Cache-Control "no-transform,public,max-age=31536000,s-max-age=31536000";
expires 1y;
}
Run Code Online (Sandbox Code Playgroud)
我想在这里做的是排除所有与模式 i18n-*.js 匹配的文件,因此,缓存除以 i18n 开头的文件之外的所有 .js 文件。
我尝试进行否定查找以排除该模式,但由于非捕获组,它无法正常工作:
location ~* \.(?!i18n-.*\.js)(?:css|js)$ {
access_log off;
add_header Cache-Control "no-transform,public,max-age=31536000,s-max-age=31536000";
expires 1y;
}
Run Code Online (Sandbox Code Playgroud)
这里的智能解决方案是什么?我不是正则表达式专家,所以简短的解释也会有帮助。
官方文档描述了如何遍历位置树:
正则表达式会按照它们在配置文件中出现的顺序进行检查。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果找不到与正则表达式的匹配项,则使用之前记住的前缀位置的配置。
基于此,配置如下:
location ~* \.(i18n-.*\.js)$ {
access_log off;
expires off;
}
location ~* \.(css|js)$ {
access_log off;
expires 1y;
add_header Cache-Control public;
}
Run Code Online (Sandbox Code Playgroud)
注意:正则表达式中的问号是多余的,除非用作变量docs:
命名的正则表达式捕获可以稍后用作变量:
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
Run Code Online (Sandbox Code Playgroud)
如果使用?:语法跳过捕获组,它们需要稍后使用,否则您可以删除以简化位置语法。
| 归档时间: |
|
| 查看次数: |
4477 次 |
| 最近记录: |