![nginx 重写规则错误:“位置”中的参数数量无效](https://linux22.com/image/792728/nginx%20%E9%87%8D%E5%86%99%E8%A7%84%E5%88%99%E9%94%99%E8%AF%AF%EF%BC%9A%E2%80%9C%E4%BD%8D%E7%BD%AE%E2%80%9D%E4%B8%AD%E7%9A%84%E5%8F%82%E6%95%B0%E6%95%B0%E9%87%8F%E6%97%A0%E6%95%88.png)
我有一个针对 WebP 图像的 nginx 重写规则,插件文档建议我添加,但它导致错误“‘location’ 中的参数数量无效”。我的托管支持无法修复此问题。有人能发现这里出了什么问题吗?
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;
}
}
答案1
您的正则表达式包含空格。因此,如果没有引号,它将被解释为两个单独的参数,^(/.
和)\.(jpg|jpeg|jpe|png|gif)$
。
Nginx 的正确语法:location ~* "^(/. )\.(jpg|jpeg|jpe|png|gif)$" { }
然而,
正则表达式看起来也很奇怪。首先,
/
如果不转义,这里是意外的,匹配组(\/. )
意味着“一个/
字符,任何单个字符和空格”。你的意思是:^(\/.*)\.(jpg|jpeg|jpe|png|gif)$