Nginx 配置文件正则表达式问题

Nginx 配置文件正则表达式问题

我正在尝试将以下重写规则转换为“try_files”:

location ~* \.(css|js) {
    if (!-f $request_filename) {
        rewrite ^/wp-content/w3tc/min/(.+\.(css|js))$ /wp-content/w3tc/min/index.php?file=$1 last;
        expires max;
    }
}

我要遵循的新规则是:

location ~* \.(css|js) {
    try_files $uri /wp-content/w3tc/min/index.php?file=$request_basename;
    expires max;
}

正在生成的示例 URI:

http://mysite.com/wp-content/w3tc/min/88f17/default.include.60eaac.css

我发现以下内容可以获取 URI 的基本名称:

map $request_uri $request_basename {
    ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}

我遇到的问题是 '$request_basename' 等于 'default.include.60eaac.css'。我尝试解决的应用程序 (W3 Total Cache) 需要将 '88f17/default.include.60eaac.css' 传递给它。

有人知道我该如何修改 map 规则以将父目录包含在它生成的变量中吗?我对正则表达式不太在行...

答案1

您可以在块中捕获基本名称location

location ~ ^/wp-content/w3tc/min/(?P<request_basename>.*\.(css|js))$ {
    try_files $uri /wp-content/w3tc/min/index.php?file=$request_basename;
}

相关内容