在我们现有的 Apache 设置中,我们在文件夹中有一个 .htaccess 文件,它将所有请求重定向到 PHP 处理程序。例如:
- www.example.com/gallery/user01/xyz.png
对于此 URL 请求:
- “/user01”部分符号链接到“/imageDB”本地文件夹。
- 在“/imageDB”文件夹中,.htaccess 文件重定向到“handleImage.php”脚本,该脚本解释“/user01/xyz.png”部分并返回适当的图像。
.htaccess 是一个简单的 404 重定向:
ErrorDocument 404 handleImage.php
有很多“userXX”文件夹链接到同一个“/imageDB”文件夹,以相同的方式处理,并且因为.htaccess 文件驻留在那里,所以每次都会被拾取,例如
- www.example.com/gallery/user021/abc.png
- www.example.com/gallery/user508/def.png
但是还有很多“userXX”文件夹链接到不同的缓存图像文件夹“/imageCache”,例如
- www.example.com/gallery/user921/ghi.png
- www.example.com/gallery/user882/jkl.png
这些是直接图像获取,不涉及 PHP 脚本。
我们现在正在转向 Nginx 设置,并且我了解到 Nginx 不允许 .htaccess 文件(因为每次读取它们都会影响性能),并且任何重定向设置都必须在主 Nginx 配置文件中完成并在启动/重新加载时读取。
我有一个有效的 Nginx 配置示例文件夹,如下所示:-
location /gallery/user01/ {
fastcgi_intercept_errors on;
error_page 404 = /gallery/user01/handleImage.php;
}
...但正如您所看到的,这只处理“user01”文件夹,但我们想要添加许多“userXX”文件夹,这些文件夹符号链接到“/imageDB”或“/imageCache”文件夹。
就好像我想创建一个正则表达式,检测传入请求的“/gallery/userXX”部分,检查最终文件夹中是否存在“handleImage.php”文件,然后调用它,否则直接获取缓存的图像。
这是实现此目的的正确方法吗?如能提供任何有关正则表达式的帮助,我将不胜感激,谢谢。
答案1
我相信您的用例的正确配置是将位置设置为/gallery/
并将error_page
设置为/gallery/imageDB/handleImage.php
。
这应该拦截所有请求,尝试返回所请求的文件,如果未找到,则点击 handleImage 脚本将其返回。
您需要确保该disable_symlinks
指令已关闭才能使其正常工作——我假设它已经适用于您的示例文件夹。