我有一个针对 WebP 图像的 nginx 重写规则,插件的文档说要添加该规则,但它导致错误“‘位置’中的参数数量无效”。我的托管支持无法解决该问题。有人能发现这里出了什么问题吗?
location ~* ^(/. )\.(jpg|jpeg|jpe|png|gif)$ {
add_header Vary Accept;
if ($http_accept ~* "webp"){
set $imwebp A;
}
if (-f $request_filename.webp) {
set $imwebp "${imwebp}B";
}
if ($imwebp = AB) {
rewrite ^(.*) $1.webp;
}
}
您的正则表达式包含空格。因此,如果不加引号,它会被解释为两个单独的参数,
^(/.
和)\.(jpg|jpeg|jpe|png|gif)$
。Nginx 的正确语法:
location ~* "^(/. )\.(jpg|jpeg|jpe|png|gif)$" { }
然而,
正则表达式看起来也很奇怪。首先,
/
如果没有转义的话,这里是意外的,匹配组的(\/. )
意思是“一个/
字符,任何单个字符和空格”。你的意思:^(\/.*)\.(jpg|jpeg|jpe|png|gif)$
如果是邪恶的……在位置上下文中使用时。