1

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

我想要达到的目标如下:

当用户访问如下网址时:http: //mywebsite.com/folder/10-11 nginx 将搜索 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=$1&page=$2 permanent;
    }

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

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

4

1 回答 1

1

您可以使用命名位置来组合这些。a 的最后一个元素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=$1&page=$2;
}
location ~ \.php$ { ... }

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

请参阅try_files 文档

于 2015-12-21T22:25:16.950 回答