Nginx 位置路径中文件名的通配符

Nginx 位置路径中文件名的通配符

.png例如,如果目录中的所有文件有关键字,则仅加载它们apple-,如果没有,则跳过。

例如我们有:

location ~* \.(?:png|xml|ico|svg|webmanifest)$ {
    alias /var/www/site.com/htdocs/sites/all/themes/dev/img/favicons;
    try_files $uri $uri/ @rewrite;
    expires     365d;
    add_header  ETag "";
    add_header  Pragma public;
    add_header  Cache-Control "max-age=31449600, no-transform, public";
    log_not_found off;
    access_log off;
}

但这会加载所有.png文件。因此,例如类似这样的方法|apple-*.png|不起作用。需要这个是因为有十几个apple-touch-icon.png文件apple-touch-icon-76x76.png需要从同一目录加载,但跳过其他文件。

答案1

正则表达式apple-*.png匹配带有大量连字符的文件名(例如apple------.png)。这*意味着零个或多个前一个字符

您可以使用.*来匹配零个或多个任意字符,或者[^/]+匹配至少一个非 的字符/

例如:

location ~* apple-[^/]+\.png$ { ... }

要将该约束应用于.png文件,但也允许其他扩展(不受约束),请使用:

location ~* apple-[^/]+\.png$|\.(xml|ico|svg|webmanifest)$ { ... }

相关内容