我对 nginx 的重写规则有疑问。
我的代码如下
location ~* \.(jpg)$ {
add_header Pragma public;
add_header Cache-Control "public";
add_header Content-Type image/jpeg;
expires 30d;
add_header Capture1 $1;
add_header Capture2 $2;
add_header X-uri "$uri";
try_files $uri @find_file;
root /data;
}
location @find_file {
add_header Pragma public;
add_header Cache-Control "public";
add_header Content-Type image/jpeg;
expires 30d;
rewrite ^/(.*(\w)(\w)(\w))\.jpg$ /d/$4/$3/$2/$1.jpg break;
}
但重写中可能没有文件
所以,我想展示 php
try_files $uri @find_file /test.php?uri=$uri;
然而,即使@find_file 中有一个文件,这也会导致 php 运行。
我想减少运行php的频率。
我应该怎么办?
(当您运行 php 时,php 会将文件放在该位置。@find_file)
答案1
可能最简单的解决方案是用术语替换rewrite
语句try_files
并使用该语句中的捕获内容location
。
例如:
root /data;
location ~* ^/(.*(\w)(\w)(\w))\.jpg$
add_header Pragma public;
add_header Cache-Control "public";
add_header Content-Type image/jpeg;
expires 30d;
try_files $uri /d/$4/$3/$2/$1.jpg /test.php?uri=$uri;
}
看这个文件了解详情。