我正在使用 nginx 来检测浏览器中的 webp 支持:
# Check if client is capable of handling webp
map $http_accept $webp_suffix {
default "";
"~*webp" ".webp";
}
Run Code Online (Sandbox Code Playgroud)
此代码工作正常,并在客户端支持图像/webp 时将 .webp 分配给 $webp_suffix
然后几行之后我在以下配置中使用这个变量:
location ~ ^/imgs/([0-9]*)/(.*?)(\..+)$ {
add_header X-webp $webp_suffix;
try_files /imgs/$1$webp_suffix /imgs/$1$3 =404;
}
Run Code Online (Sandbox Code Playgroud)
即使两个文件都存在,它总是会导致 e404。标题 X-webp 设置为“.webp”,因此地图工作正常。
更奇怪的是 - 如果我交换 try_files 参数的顺序:
try_files /imgs/$1$webp_suffix /imgs/$1$3 =404;
Run Code Online (Sandbox Code Playgroud)
到
try_files /imgs/$1$3 /imgs/$1$webp_suffix =404;
Run Code Online (Sandbox Code Playgroud)
然后它开始工作并将文件 /imgs/$1$3 发送到浏览器。这怎么可能 ?我在这个逻辑中遗漏了什么吗?
EDIT1:完成 nginx.conf 以重现:
events {
use epoll;
worker_connections 128;
}
http {
# Check if client is …
Run Code Online (Sandbox Code Playgroud)