我正在尝试将以下重写规则转换为“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;
}