小编for*_*rke的帖子

NGINX:map 和 try_files 不起作用

我正在使用 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)

nginx regex

5
推荐指数
1
解决办法
521
查看次数

标签 统计

nginx ×1

regex ×1