![nginx 根据查询参数使用不同的try_files](https://linux22.com/image/732755/nginx%20%E6%A0%B9%E6%8D%AE%E6%9F%A5%E8%AF%A2%E5%8F%82%E6%95%B0%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%90%8C%E7%9A%84try_files.png)
location / {
try_files "/wp-content/cache/all/${uri}index.html" $uri $uri/ /index.php?q=$uri&$args;
}
但如果使用可视化编辑器,我不想使用缓存。所以应该是
location / {
if ($args ~ visual-editor){
try_files $uri $uri/ /index.php?q=$uri&$args;
}
try_files "/wp-content/cache/all/${uri}index.html" $uri $uri/ /index.php?q=$uri&$args;
}
但它不起作用,因为 nginx 对主要进行 apache 配置的人来说具有限制性并且很奇怪。
我尝试了命名位置,我尝试了一个子位置以使其乐意使用try_files,我不想重写,使用命名位置的错误代码黑客将导致查询参数被删除,这是不可能发生的。
这个想法很简单,如果我定义了一些排除项,则不要加载缓存的 html 文件。但似乎没有什么用,互联网给出的答案永远无法回答我的问题,所以我在这里提问。
答案1
您不能将其放入块try_files
中if
,但您可以在块中设置一个变量if
并使用它来使语句的第一个术语无效try_files
。
例如:
server {
...
set $cache /wp-content/cache/all;
if ($args ~ visual-editor) { set $cache /nonexistent; }
location / {
try_files $cache${uri}index.html $uri $uri/ /index.php?q=$uri&$args;
}
...
}
看这种警告关于 的使用if
。