NGINX 重写条件问题

NGINX rewrite condition issues

我的 nginx 服务器上有一个位置,例如 /folder/。在该文件夹中有 .jpg 文件和一个 .php 脚本。

我要实现的目标如下:

当用户访问一个url像:http://mywebsite.com/folder/10-11nginx会搜索10-11文件,10-11.png文件,10-11.jpg文件并显示它(如果文件在服务器上)。此部分工作正常。

现在,当用户访问同一个 url 时,如果该文件不存在,我希望将用户重定向到该 php 脚本。

Bellow 是 nginx 配置中有效的部分。该文件夹中的所有图像文件都像 10-10、21-19、90-20 等(2 位数 - 2 位数)。

location /app/comics/lqthumb/ {
                try_files $uri /$uri.png /$uri.jpg;
}

另一个 nginx 部分应该是这样的:

location /app/comics/lqthumb/ {
        rewrite ^/app/comics/lqthumb/(.*?)-(.*?)$ /app/comics/lqthumb/thumbgen.php?chapter=&page= permanent;
    }

想法是把这条规则结合起来。我怎样才能做一个 if else 语句或类似的东西?我尝试了几种组合,阅读了很多论坛帖子甚至是这里的答案,但我无法使它起作用。

如果您有任何问题,请告诉我!

您可以使用命名位置将它们结合起来。 try_files 的最后一个元素可以调用默认操作以输入命名位置以处理重写。

root /path/to/root;

location /app/comics/lqthumb {
    try_files $uri $uri.png $uri.jpg @thumbgen;
}
location @thumbgen {
    rewrite ^/app/comics/lqthumb/(.*?)-(.*?)$ /app/comics/lqthumb/thumbgen.php?chapter=&page=;
}
location ~ \.php$ { ... }

我已经删除了你放在 $uri 之前的虚假 /。我假设您有一个调用 PHP 解释器的位置,否则,您可以将这些指令放入指定位置。我不确定您是否打算将重定向设为 permanent。没有标志,内部重定向对用户透明地执行。

try_files documentation