将PNG文件请求传递给Nginx中的PHP脚本

问题描述 投票:0回答:1

这是我需要做的 - 我需要我的服务器提供一组图像的两个版本。第一组图像是真实的PNG文件,它们位于我服务器上的文件夹中,称之为/realimages。第二组图像实际上并不存在。当他们被请求时,我想要获取所请求的图像文件名,例如

https://example.com/nosuchimage/img1.png

通过坐落在/nosuchmage文件夹内的index.php脚本生成图像(或者如果更容易的话,在其他地方生成)。

该脚本执行以下操作

  • /realimages文件夹中获取相关图像
  • 使用PHP GD生成背景
  • 在背景上叠加相关图像
  • 提供结果

该脚本已编写完整,功能齐全。我不知道的是如何强制所有PNG图像请求到/nosuchimage文件夹被重定向到该脚本,原始请求作为脚本参数传递。

我知道这对NGINX来说是一个相对简单的配置问题,涉及编写重写规则。然而,NGINX重写对我来说仍然是一个黑色的艺术。希望有人能够告诉我重写规则应该是什么。

nginx url-rewriting
1个回答
0
投票

要重定向某个文件夹的所有图像,只需使用配置文件中的以下代码即可。

在我的情况下,我将使用默认文件。 /etc/nginx/sites-available/default

location ~ \/realimages/(.+\.png)$ {
    return 302 $scheme://$server_name/nosuchimage/$1;
}

// Access: http://www.example.com/images/valdeirpsr.png (Exists & Redirect to /nosuchimage/valdeirpsr.png)
// Access: http://www.example.com/images/valdeirpsr2.png (Not Exists & Redirect to /nosuchimage/valdeirpsr2.png)

要仅重定向特定文件夹中未找到的图像,只需使用配置文件中的以下代码即可。

location ~ \/realimages/(.+\.png)$ {
    error_page 404 $scheme://$server_name/nosuchimage/$1;
}

// Access: http://www.example.com/images/valdeirpsr.png (Exists & Show Image)
// Access: http://www.example.com/images/valdeirpsr2.png (Not Exists & Redirect to /nosuchimage/valdeirpsr2.png)
© www.soinside.com 2019 - 2024. All rights reserved.