gpt4 book ai didi

正则表达式查找匹配文件扩展名的文件,除非文件名包含字符串

转载 作者:行者123 更新时间:2023-12-05 00:52:31 25 4
gpt4 key购买 nike

我为 nginx 中的特定文件启用了缓存,如下所示:

location ~* \.(?:css|js)$ {
access_log off;
add_header Cache-Control "no-transform,public,max-age=31536000,s-max-age=31536000";
expires 1y;
}

我想在这里做的是排除所有与模式 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;
}

这里的智能解决方案是什么?我不是正则表达式专家,所以简短的解释也会有帮助。

最佳答案

官方文档 describes如何遍历位置树:

Rregular expressions are checked, in the order of their appearance in the configuration file. The search of regular expressions terminates on the first match, and the corresponding configuration is used. If no match with a regular expression is found then the configuration of the prefix location remembered earlier is used.



基于此,配置如下:
location ~* \.(i18n-.*\.js)$ {
access_log off;
expires off;
}

location ~* \.(css|js)$ {
access_log off;
expires 1y;
add_header Cache-Control public;
}

注意:正则表达式中的问号是多余的,除非用作变量 docs :

A named regular expression capture can be used later as a variable:


server {
server_name ~^(www\.)?(?<domain>.+)$;

location / {
root /sites/$domain;
}
}

如果使用 ?:语法跳过捕获组,它们需要稍后使用,否则您可以删除以简化位置语法。

关于正则表达式查找匹配文件扩展名的文件,除非文件名包含字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42562103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com