重写 nginx 的 try_files rewrite

重写 nginx 的 try_files rewrite

我对 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;
}

这个文件了解详情。

相关内容