nginx 重写规则错误:“位置”中的参数数量无效

nginx 重写规则错误:“位置”中的参数数量无效

我有一个针对 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)$

  • 如果在位置上下文中使用则为邪恶……

相关内容