Nginx - 将 URL 路径之后的所有请求重定向到 PHP 脚本

Nginx - 将 URL 路径之后的所有请求重定向到 PHP 脚本

在我们现有的 Apache 设置中,我们在文件夹中有一个 .htaccess 文件,它将所有请求重定向到 PHP 处理程序。例如:

  • www.example.com/gallery/user01/xyz.png

对于此 URL 请求:

  1. “/user01”部分符号链接到“/imageDB”本地文件夹。
  2. 在“/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指令已关闭才能使其正常工作——我假设它已经适用于您的示例文件夹。

相关内容